spf(sender policy framework)在python中实现。

pyspf的Python项目详细描述


spf
在python中查询发送方策略框架。


快速启动
==


安装
----
此包需要pydns(或py3dns用于与python 3一起运行)和
ipaddr或python3.3及更高版本。pydns可在
http://pydns.sourceforge.net上找到。pydns的二进制和源rpm也可以从http://pymilter.sourceforge.net获得。py3dns可在pypi
和https://launchpad.net/py3dns上获得。ipaddr模块可以从
http://code.google.com/p/ipaddr-py或作为python标准库的一部分
从python3.3(作为ipaddress)开始。此包要求来自
pypi或http://launchpad.net/authentication-results-python的authres来处理
,并生成RFC 5451身份验证结果头。

在您的站点-
特定的python扩展目录::

%python setup.py build
%su
python setup.py install

这个
版本中的spf模块已经用python3.2进行了测试,不需要使用2to3。它
适用于所有版本的pydns或py3dns。它可以与独立的ipaddr模块或标准库ipaddress模块一起工作。

cd进入test目录并
执行testspf.py::

%cd test
%python testspf.py
警告:RFC4408-tests.yml中的域长度无效,8.1/2,5/10:fail preferred to temperror
警告:RFC4408-tests.yml中的txttimeout,4.4/1:fail preferred to temperror
警告:RFC4408-tests.yml中的spfoverride,4.5/5:通过优先于失败
警告:RFC4408-tests.yml中的multixt1,4.5/5:通过优先于permerror
警告:RFC4408-tests.yml中的multispf2,4.5/6:permerror优先通过

-----------------------------------
在3.036s中运行了两个测试

ok

但是使用内部驱动程序。
这样可以避免由于DNS超时而更改结果。

此外,spf.py每次从
命令行使用时都会运行内部自检。

如果在Mac OS X上运行,并且看起来dns.discovernameservers()
失败,则需要编辑/etc/resolv.conf并指定
域名。出于某种原因,os x用一个
"domain"行写出resolv.conf,这一点都不好。PY3DNS的更高版本已经更新,以更好地支持Max OS X。




description
==
SPF会进行电子邮件发件人验证。有关SPF的更多信息,
请参见http://www.openspf.net/

1.7版中引入了一个不兼容的更改。在版本1.7之前,
来自本地IP地址(127…)的连接将始终返回一个pass
结果。特例被取消了。调用pyspf的程序不应对本地提交的邮件进行spf检查。

SPF检查应在邮件发件人:<;…>;命令期间完成。

第一个来自命令行:
%python spf.py{ip addr}{mail from}{helo}

在从客户端69.55.226.139进行SMTP交换期间:
s:220 mail.example.com esmtp postfix
c:ehlo mx1.wayforward.net
s:250 mail.example.com
s:…
s:250 8bitmime
c:mail from:<;terry@wayforward.net>;

有效发件人:
%./spf.py 69.55.226.139 terry@wayforward.net mx1.wayforward.net
('pass',250,'sender spf authorized')

返回RFC 4408/7208结果代码,即"pass"、"fail"、"neutral"、"softfail"、"permeror"或"temperror"。

s='terry@wayforward.net',
…h='mx1.wayforward.net')
('pass',250,'sender spf authorized')


元组中的第一个元素是"pass"、"fail"、"netural"、"softfail"、"unknown"或"error"之一。第二个是smtp响应状态代码:550表示
"失败",450表示"错误",250表示所有其他。第三个是一个解释。

注意:单凭spf结果永远不足以决定接受一条消息。接受、拒绝或推迟决策是本地Receiver
策略的功能。

s='terry@wayforward.net',
…h='mx1.wayforward.net')
('pass','sender spf verified')


元组中的第一个元素是'pass'、'fail'、'neutral'、'softfail'、
'permerror'或'temperror'之一。第二个是一个解释。

这个包还提供了另外两个助手脚本:type99.py和
spfquery.py。type99.py脚本将dns txt字符串转换为适合在绑定区域文件中使用的二进制
等效字符串。spfquery.py脚本是对Wayne Schlitt的spfquery命令行工具的
python重新实现。


type99.py脚本从命令行调用如下:


python type99.py"v=spf1-all"{注意:请改用所需的SPF记录。}
\\12 0b763d73706631202d616c6c{这是"v=spf1-all"的正确结果}





输入文件格式是标准绑定区域文件。type99脚本将为文件中的每个txt记录添加一个type99记录。RFC 7208中已从SPF中删除使用DNS类型99
(SPF类型),因此此脚本应仅具有
历史意义。


spfquery.py脚本使用许多可能的选项调用。选项可以
使用标准的"-"前缀,也可以是Perl样式的长选项,'--'。支持的
选项有:

"-file"或"-file"{filename}:从指定的
文件读取查询。如果{filename}为"0",则从stdin读取查询输入。

"-ip"或"-ip"{address}:用于SPF检查的客户端IP地址。



"-sender"或"-sender"{mail from address}:接收邮件的信封发件人。

"-helo"或"-helo"{client hostname}:smtp客户端使用的helo/ehlo名称。

"-local"或"-local"{local policy spf string}:要根据本地策略检查的其他spf机制。请注意,本地策略匹配不是严格意义上的spf结果。RFC
4408或RFC 7208中未定义本地策略处理。结果可能因SPF实现而异。

"--rcpt to"或"rcpt to"{rcpt to address-如果可用}:收货地址
不用于实际的SPF处理,但如果可用,它可以用于
日志记录,SPF接收头构造,当消息由于spf而被拒绝时,提供有用的拒绝
消息。

--默认解释"或"--默认解释"{解释字符串}:默认
使用的解释字符串失败。

"--清除"或"--清除"和"-调试"或"--调试":这些选项在python实现中没有op
,但是是有效的输入,可以为原始perl和c spf query实现提供兼容的输入文件。


对象。
它是根据RFC 7208,默认设置为20秒。如果querytime设置为
0,则禁用总时间限制,而使用每个dns查找限制
。默认为20秒,可通过
spf.max_per_lookup_time进行控制。RFC4408说,可以使用总限制,如果使用,建议不少于20秒。RFC7208更强,因此,现在使用了与RFC要求对齐的
默认限制。< Python软件基金会许可证> BR/>< BR/>作者:Terence Way terry @ WayFor.Net < BR/> http://www. WordPo.NET/SPF/
BR/>维护者:
Stuart Gathman Stualt @ Gthman。org < BR> Scott Kittermanscott@kitterman.com
http://cheeseshop.python.org/pypi/pyspf

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改