ipsec.py CANT找到属性IPPROTO_ESP和socket.IPPROTO_AH

yos*_*ran 5 python sockets ipsec scapy

我为python 2.6安装了模块scapy,当我导入这个模块时,我得到了这个警告:

警告:无法导入图层ipsec:'module'对象没有属性'IPPROTO_AH'

我看了socket属性,我没有找到'IPPROTO_AH'属性另外,我试图编辑模块ipsec.py并找到用其他东西替换IPPROTO_AH的方法然后我得到警告与IPPROTO_ESP!

我尝试在ipsec.py中编辑行,例如:

    overload_fields = {
    IP: {'proto': IPTest},
    IPv6: {'nh': IPTest},
    IPv6ExtHdrHopByHop: {'nh': socket.IPPROTO_AH},
    IPv6ExtHdrDestOpt: {'nh': socket.IPPROTO_AH},
    IPv6ExtHdrRouting: {'nh': socket.IPPROTO_AH},}

bind_layers(IP, AH, proto=socket.IPPROTO_AH)
bind_layers(IPv6, AH, nh=socket.IPPROTO_AH)
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题 ?

Cri*_*ati 6

我想我拥有它...它不是一个干净的解决方案,但它会做到这一点......我已经在其他scapy文件中看到过它...
你需要做的就是编辑ipsec.py并查找该行import socket 就在它之下,添加这些条件:

if not hasattr(socket, "IPPROTO_ESP"):
    socket.IPPROTO_ESP = 50
if not hasattr(socket, "IPPROTO_AH"):
    socket.IPPROTO_AH = 51
Run Code Online (Sandbox Code Playgroud)

正如我在其中一篇评论中提到的,我在各种操作系统(Lnx,Sol,AIX,HPUX,OSX)上使用Python 2.7.10进行了测试,并且值似乎是一致的,而在Win上它们并不存在.好像MS在(VStudio)20052010之间从WinSock2.h中删除了它们.