从 python 3.5.2 移动到 python 3.7.4 时出现 winpcapy 错误
winpcapy errors when moving from python 3.5.2 to python 3.7.4
我一直很高兴地使用一些 python 来生成原始以太网帧,并使用 Python 3.5.2 和 winpcapy 将它们发送到 Windows 7 上选择的接口。我刚刚安装了 Python 3.7.4,现在在尝试 运行 相同代码时收到错误消息。
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_ERRBUF_SIZE' 替换为一个整数值,但随后我遇到了更多问题,看起来我在 3.7 中使用 winpcapy 的方式通常存在一些问题。还有其他人遇到过这类问题吗?
你是如何获得winpcapy
的?
Google 代码上的 PyPI winpcapy package is not the same as the historical winpcapy script。 PyPI 包在 winpcapy.winpcapy_types
模块中公开 libpcap
API。
在原始 winpcapy
脚本中 PCAP_ERRBUF_SIZE
是在 winpcapy
模块中定义的值。您可以像在您提供的代码中一样导入它:
import winpcapy
print(winpcapy.PCAP_ERRBUF_SIZE)
但是,在较新的 PyPI 包中 PCAP_ERRBUF_SIZE
是在 winpcapy.winpcapy_types
中定义的。所以你需要做类似的事情:
from winpcapy import winpcapy_types as wtypes
print(wtypes.PCAP_ERRBUF_SIZE)
我一直很高兴地使用一些 python 来生成原始以太网帧,并使用 Python 3.5.2 和 winpcapy 将它们发送到 Windows 7 上选择的接口。我刚刚安装了 Python 3.7.4,现在在尝试 运行 相同代码时收到错误消息。
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_ERRBUF_SIZE' 替换为一个整数值,但随后我遇到了更多问题,看起来我在 3.7 中使用 winpcapy 的方式通常存在一些问题。还有其他人遇到过这类问题吗?
你是如何获得winpcapy
的?
Google 代码上的 PyPI winpcapy package is not the same as the historical winpcapy script。 PyPI 包在 winpcapy.winpcapy_types
模块中公开 libpcap
API。
在原始 winpcapy
脚本中 PCAP_ERRBUF_SIZE
是在 winpcapy
模块中定义的值。您可以像在您提供的代码中一样导入它:
import winpcapy
print(winpcapy.PCAP_ERRBUF_SIZE)
但是,在较新的 PyPI 包中 PCAP_ERRBUF_SIZE
是在 winpcapy.winpcapy_types
中定义的。所以你需要做类似的事情:
from winpcapy import winpcapy_types as wtypes
print(wtypes.PCAP_ERRBUF_SIZE)