我一直很高兴地使用一些 python 来生成原始以太网帧,并使用带有 winpcapy 的 Python 3.5.2 在 Windows 7 上将它们发送到一个选择的接口。我刚刚安装了 Python 3.7.4,现在在尝试运行相同的代码时收到错误消息。import ctypesimport winpcapyimport syserrbuf = ctypes.create_string_buffer(winpcapy.PCAP_ERRBUF_SIZE)alldevs = ctypes.POINTER(winpcapy.pcap_if_t)()winpcapy.pcap_findalldevs(ctypes.byref(alldevs), errbuf)device = alldevs.contentsinterfaces = []while True: interfaces.append(device) if not device.next: break device = device.next.contentsprint(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 的方式通常有问题。有没有其他人遇到过这类问题?
1 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
你是如何获得的winpcapy?
PyPI winpcapy 包与Google Code 上的历史 winpcapy 脚本不同。PyPI 包在模块中公开libpcapAPI 。winpcapy.winpcapy_types
在原始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)
添加回答
举报
0/150
提交
取消