从python 3.5.2移动到python 3.7.4时出现winpcapy错误
我一直很高兴使用一些python生成原始以太网帧,并在Windows7上使用带有winpcapy的python 3.5.2发送它们。我刚刚安装了Python3.7.4,现在在尝试运行相同代码时收到一个错误从python 3.5.2移动到python 3.7.4时出现winpcapy错误,python,windows,winpcap,Python,Windows,Winpcap,我一直很高兴使用一些python生成原始以太网帧,并在Windows7上使用带有winpcapy的python 3.5.2发送它们。我刚刚安装了Python3.7.4,现在在尝试运行相同代码时收到一个错误 import ctypes import winpcapy import sys errbuf = ctypes.create_string_buffer(winpcapy.PCAP_ERRBUF_SIZE) alldevs = ctypes.POINTER(winpcapy.pcap_i
import ctypes
import winpcapy
import sys
errbuf = ctypes.create_string_buffer(winpcapy.PCAP_ERRBUF_SIZE)
alldevs = ctypes.POINTER(winpcapy.pcap_if_t)()
winpcapy.pcap_findalldevs(ctypes.byref(alldevs), errbuf)
device = alldevs.contents
interfaces = []
while True:
interfaces.append(device)
if not device.next:
break
device = device.next.contents
print(interfaces)
在3.5中运行时,代码段将打印找到的接口列表。但是,如果我在3.7中运行它,我会得到:
Traceback (most recent call last): File "Z:\proj\eth\socket.py", line 5, in
<module> errbuf = ctypes.create_string_buffer(winpcapy.PCAP_ERRBUF_SIZE)
AttributeError: module 'winpcapy' has no attribute 'PCAP_ERRBUF_SIZE'
现在,我可以用一个整数值替换“PCAP\u ERRBUF\u SIZE”,但接下来我会遇到更多的问题,看起来我在3.7中使用winpcapy的方式普遍存在问题。还有其他人遇到过此类问题吗?您是如何获得winpcapy的
这和谷歌代码上的不一样。PyPI包在winpcapy.winpcapy_类型模块中公开libpcap API
在原始winpcapy脚本中,PCAP_ERRBUF_SIZE是在winpcapy模块中定义的值。您可以像在您提供的代码中一样导入它:
import winpcapy
print(winpcapy.PCAP_ERRBUF_SIZE)
但是,在较新的PyPI包中,PCAP_ERRBUF_大小在winpcapy.winpcapy_类型中定义。因此,您需要执行以下操作:
from winpcapy import winpcapy_types as wtypes
print(wtypes.PCAP_ERRBUF_SIZE)
显示完整的错误回溯。回溯最后一次调用:文件Z:\proj\eth\socket.py,第5行,errbuf=ctypes.create\u string\u bufferwinpcapy.PCAP\u errbuf\u SIZE attributeer错误:模块“winpcapy”没有属性“PCAP\u errbuf\u SIZE”请将所有相关信息添加到问题本身。代码块和堆栈跟踪在注释中不可读。我注意到的第一件事是:如果命名模块套接字,它可能与内置模块socket.Done冲突。我同意你的观点,把一个文件命名为“socket”。这只是一个临时文件,因为我从一个更大的文件中提取了部分代码,以测试我发布的内容是否独立工作。原始文件给出了相同的错误,但我不想发布全部内容。我很确定我最初是从PyPI获得的,但那是很久以前的事了。不过,我最近从PyPI安装了最新的winpcapy。您的第二个示例现在在Python3.7.4中对我有效,而第一个示例没有如预期的那样有效。但是,如果我回到Python3.5.2,第一个可以工作,但是在第二个示例中,winpcapy_类型的导入失败。谢谢我没有代表,不能投票!