On Wed, Feb 25, 2004 at 01:34:05PM +0100, Ernesto Baschny wrote:
|
| Being in the perl-mood, here is the same stuff in form of a perl module,
| which can be used from other scripts:
|
| http://www.baschny.de/spf/LMAP-CID2SPF-0.9.tar.gz
|
| This also includes the cid2spf script, so this will be the thing
| that I will be maintaining. Should install with the standard
| "perl Makefile.PL; make; make test; make install" procedure.
|
Mail::SPF::Query version 1.992 has been released; it fixes a couple of
minor bugs and adds support for "fallback" and "override" functionality.
"fallback" lets you pretend a domain has an SPF record.
"override" lets you override a domain's existing SPF record.
http://spf.pobox.com/Mail-SPF-Query-1.992.tar.gz
* * *
Mail::SPF::Query version 1.993 has been released; it adds support for
Caller-ID lookups. You will need Expat, XML::Parser, and LMAP::CID2SPF
from http://www.baschny.de/spf/LMAP-CID2SPF-0.9.tar.gz (note that the
CID2SPF module name may change in the future; experiment at your own risk.)
Caller-ID may be a patented technology and you may require a license
from Microsoft to use it. If this worries you, you should download
version 1.992 instead.
Much of Caller-ID's mail server declaration syntax can be translated
into a subset of SPF. Caller-ID is described in detail at
http://www.microsoft.com/mscorp/twc/privacy/spam_callerid.mspx
The following output demonstrates a lookup against Hotmail.com.
20040225-23:28:48 mengwong(_at_)dumbo:~% perl -MMail::SPF::Query -le 'my $query
= Mail::SPF::Query->new(ipv4=>$ARGV[0], helo=>$ARGV[1], sender=>$ARGV[2],
debug=>0); print "result: $_" for $query->result;' 131.107.8.12
helo.example.com mengwong(_at_)hotmail(_dot_)com
result: pass
result: Please see
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com:
131.107.0.0/16 contains 131.107.8.12
result: dumbo.pobox.com: domain of mengwong(_at_)hotmail(_dot_)com designates
131.107.8.12 as permitted sender
result: v=spf1 include:_ep.list1._ep.hotmail.com
include:_ep.list2._ep.hotmail.com include:_ep.list3._ep.hotmail.com ?all
20040225-23:28:55 mengwong(_at_)dumbo:~% perl -MMail::SPF::Query -le 'my $query
= Mail::SPF::Query->new(ipv4=>$ARGV[0], helo=>$ARGV[1], sender=>$ARGV[2],
debug=>1); print "result: $_" for $query->result;' 131.107.8.12
helo.example.com mengwong(_at_)hotmail(_dot_)com
| hotmail.com new: ipv4=131.107.8.12, sender(_at_)Î õæTCì¤ê?(?2Ø,
helo=helo.example.com
| mengwong hotmail.com localpart is mengwong
| mengwong hotmail.com DirectiveSet->new(): doing TXT query on
hotmail.com
| mengwong hotmail.com myquery: doing TXT query on hotmail.com
| mengwong hotmail.com DirectiveSet->new(): TXT query on hotmail.com
returned error=, last_dns_error=
| mengwong hotmail.com DirectiveSet->new(): will try fallbacks.
| mengwong hotmail.com DirectiveSet->new(): fallback search failed.
| mengwong hotmail.com DirectiveSet->new(): doing TXT query on
_ep.hotmail.com
| mengwong hotmail.com myquery: doing TXT query on _ep.hotmail.com
| mengwong hotmail.com DirectiveSet->new(): TXT query on hotmail.com
returned error=, last_dns_error=NOERROR
| mengwong hotmail.com CID2SPF: in: <ep xmlns='http://ms.net/1'
testing='true'><out><m><indirect>list1._ep.hotmail.com</indirect><indirect>list2._ep.hotmail.com</indirect><indirect>list3._ep.hotmail.com</indirect></m></out></ep>
| mengwong hotmail.com CID2SPF: out: v=spf1
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com
include:_ep.list3._ep.hotmail.com ?all
| mengwong hotmail.com DirectiveSet->new(): SPF policy:
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com
include:_ep.list3._ep.hotmail.com ?all
| mengwong hotmail.com lookup: TXT
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com
include:_ep.list3._ep.hotmail.com ?all
| mengwong hotmail.com lookup: TXT prefix=+, lhs=include,
rhs=_ep.list1._ep.hotmail.com
| mengwong hotmail.com lookup: TXT prefix=+, lhs=include,
rhs=_ep.list2._ep.hotmail.com
| mengwong hotmail.com lookup: TXT prefix=+, lhs=include,
rhs=_ep.list3._ep.hotmail.com
| mengwong hotmail.com lookup: TXT prefix=?, lhs=all, rhs=
| mengwong hotmail.com lookup: mec
mechanisms=+include(_ep.list1._ep.hotmail.com)
+include(_ep.list2._ep.hotmail.com) +include(_ep.list3._ep.hotmail.com) ?all()
| mengwong hotmail.com evaluate_mechanism:
+include(_ep.list1._ep.hotmail.com) for domain=hotmail.com
| mengwong hotmail.com mechanism include: recursing into
_ep.list1._ep.hotmail.com
| mengwong hotmail.com clone: new object:
|| mengwong _ep.list1._ep.hotmail.com clone: parent =
Mail::SPF::Query=HASH(0x80f001c)
|| mengwong _ep.list1._ep.hotmail.com clone: ipv4 =
131.107.8.12
|| mengwong _ep.list1._ep.hotmail.com clone: helo =
helo.example.com
|| mengwong _ep.list1._ep.hotmail.com clone: lookup_count = 1
|| mengwong _ep.list1._ep.hotmail.com clone: default_explanation =
Please see http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR}
|| mengwong _ep.list1._ep.hotmail.com clone: loop_report =
ARRAY(0x8303ba4)
|| mengwong _ep.list1._ep.hotmail.com clone: spf_source =
domain of mengwong(_at_)hotmail(_dot_)com
|| mengwong _ep.list1._ep.hotmail.com clone: directive_set =
DirectiveSet=HASH(0x8393fa4)
|| mengwong _ep.list1._ep.hotmail.com clone: domain =
_ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com clone: trusted =
|| mengwong _ep.list1._ep.hotmail.com clone: debug = 1
|| mengwong _ep.list1._ep.hotmail.com clone: guess =
|| mengwong _ep.list1._ep.hotmail.com clone: last_dns_error =
NOERROR
|| mengwong _ep.list1._ep.hotmail.com clone: localpart =
mengwong
|| mengwong _ep.list1._ep.hotmail.com clone: spf_error_explanation = SPF
record error
|| mengwong _ep.list1._ep.hotmail.com clone: default_record =
|| mengwong _ep.list1._ep.hotmail.com clone: depth = 1
|| mengwong _ep.list1._ep.hotmail.com clone: orig_domain =
hotmail.com
|| mengwong _ep.list1._ep.hotmail.com clone: res =
Net::DNS::Resolver=HASH(0x80fabc8)
|| mengwong _ep.list1._ep.hotmail.com clone: myhostname =
dumbo.pobox.com
|| mengwong _ep.list1._ep.hotmail.com clone: local =
|| mengwong _ep.list1._ep.hotmail.com clone: Reversed_IP =
12.8.107.131
|| mengwong _ep.list1._ep.hotmail.com clone: sanitize =
CODE(0x8329ca4)
|| mengwong _ep.list1._ep.hotmail.com clone: sender =
mengwong(_at_)hotmail(_dot_)com
|| mengwong _ep.list1._ep.hotmail.com DirectiveSet->new(): doing TXT
query on _ep._ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com myquery: doing TXT query on
_ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com DirectiveSet->new(): TXT query on
_ep.list1._ep.hotmail.com returned error=, last_dns_error=NOERROR
|| mengwong _ep.list1._ep.hotmail.com CID2SPF: in: <ep
xmlns='http://ms.net/1'
testing='true'><out><m><r>209.240.192.0/19</r><r>65.52.0.0/14</r><r>131.107.0.0/16</r><r>157.54.0.0/15</r><r>157.56.0.0/14</r><r>157.60.0.0/16</r><r>167.220.0.0/16</r><r>204.79.135.0/24</r><r>204.79.188.0/24</r><r>204.79.252.0/24</r><r>207.46.0.0/16</r><r>199.2.137.0/24</r><r>199.103.90.0/23</r></m></out></ep>
|| mengwong _ep.list1._ep.hotmail.com CID2SPF: out: v=spf1
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24
ip4:199.103.90.0/23 ?all
|| mengwong _ep.list1._ep.hotmail.com DirectiveSet->new(): SPF policy:
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24
ip4:199.103.90.0/23 ?all
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24
ip4:199.103.90.0/23 ?all
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=209.240.192.0/19
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=65.52.0.0/14
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=131.107.0.0/16
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=157.54.0.0/15
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=157.56.0.0/14
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=157.60.0.0/16
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=167.220.0.0/16
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=204.79.135.0/24
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=204.79.188.0/24
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=204.79.252.0/24
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=207.46.0.0/16
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=199.2.137.0/24
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=+, lhs=ip4,
rhs=199.103.90.0/23
|| mengwong _ep.list1._ep.hotmail.com lookup: TXT prefix=?, lhs=all,
rhs=
|| mengwong _ep.list1._ep.hotmail.com lookup: mec
mechanisms=+ip4(209.240.192.0/19) +ip4(65.52.0.0/14) +ip4(131.107.0.0/16)
+ip4(157.54.0.0/15) +ip4(157.56.0.0/14) +ip4(157.60.0.0/16)
+ip4(167.220.0.0/16) +ip4(204.79.135.0/24) +ip4(204.79.188.0/24)
+ip4(204.79.252.0/24) +ip4(207.46.0.0/16) +ip4(199.2.137.0/24)
+ip4(199.103.90.0/23) ?all()
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(209.240.192.0/19) for domain=_ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com mechanism ip4: looking for
131.107.8.12 in 209.240.192.0/19
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(209.240.192.0/19) returned
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(65.52.0.0/14) for domain=_ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com mechanism ip4: looking for
131.107.8.12 in 65.52.0.0/14
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(65.52.0.0/14) returned
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(131.107.0.0/16) for domain=_ep.list1._ep.hotmail.com
|| mengwong _ep.list1._ep.hotmail.com mechanism ip4: looking for
131.107.8.12 in 131.107.0.0/16
|| mengwong _ep.list1._ep.hotmail.com evaluate_mechanism:
+ip4(131.107.0.0/16) returned hit 131.107.0.0/16 contains 131.107.8.12
|| mengwong _ep.list1._ep.hotmail.com saving result pass to cache point
and returning.
|| mengwong _ep.list1._ep.hotmail.com macro_substitute_item: S:
field=S, num=, reverse=, delim=., newval=mengwong%40hotmail.com
|| mengwong _ep.list1._ep.hotmail.com macro_substitute_item: I:
field=I, num=, reverse=, delim=., newval=131.107.8.12
|| mengwong _ep.list1._ep.hotmail.com macro_substitute_item: xR:
field=xR, num=, reverse=, delim=., newval=dumbo.pobox.com
|| mengwong _ep.list1._ep.hotmail.com macro_substitute: Please see
http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR} -> Please see
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com
| mengwong hotmail.com mechanism include: got back result pass /
131.107.0.0/16 contains 131.107.8.12 /
| mengwong hotmail.com evaluate_mechanism:
+include(_ep.list1._ep.hotmail.com) returned hit 131.107.0.0/16 contains
131.107.8.12
| mengwong hotmail.com saving result pass to cache point and returning.
| mengwong hotmail.com macro_substitute_item: S: field=S, num=,
reverse=, delim=., newval=mengwong%40hotmail.com
| mengwong hotmail.com macro_substitute_item: I: field=I, num=,
reverse=, delim=., newval=131.107.8.12
| mengwong hotmail.com macro_substitute_item: xR: field=xR, num=,
reverse=, delim=., newval=dumbo.pobox.com
| mengwong hotmail.com macro_substitute: Please see
http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR} -> Please see
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com
result: pass
result: Please see
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com:
131.107.0.0/16 contains 131.107.8.12
result: dumbo.pobox.com: domain of mengwong(_at_)hotmail(_dot_)com designates
131.107.8.12 as permitted sender
result: v=spf1 include:_ep.list1._ep.hotmail.com
include:_ep.list2._ep.hotmail.com include:_ep.list3._ep.hotmail.com ?all
-------
To unsubscribe, change your address, or temporarily deactivate your
subscription,
please go to http://v2.listbox.com/member/?listname(_at_)Ë`Ì{5¤¨wâÇSÓ°)h