猿问

从 python 3.5.2 移动到 python 3.7.4 时出现 winpcapy 错误

我一直很高兴地使用一些 python 来生成原始以太网帧,并使用带有 winpcapy 的 Python 3.5.2 在 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 的方式通常有问题。有没有其他人遇到过这类问题?


PIPIONE
浏览 293回答 1
1回答

MMMHUHU

你是如何获得的winpcapy?PyPI winpcapy 包与Google Code 上的历史 winpcapy 脚本不同。PyPI 包在模块中公开libpcapAPI 。winpcapy.winpcapy_types在原始winpcapy脚本中是模块PCAP_ERRBUF_SIZE中定义的值。winpcapy您可以像在您提供的代码中一样导入它:import winpcapyprint(winpcapy.PCAP_ERRBUF_SIZE)但是,在较新的 PyPI 包PCAP_ERRBUF_SIZE中定义为winpcapy.winpcapy_types. 因此,您需要执行以下操作:from winpcapy import winpcapy_types as wtypesprint(wtypes.PCAP_ERRBUF_SIZE)
随时随地看视频慕课网APP

相关分类

Python
我要回答