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

2024-04-27 03:41:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直很高兴使用一些python生成原始以太网帧,并在windows7上使用python3.5.2和winpcapy发送它们所选择的接口。我刚刚安装了python3.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\u ERRBUF\u SIZE',但是我得到了进一步的问题,看起来我在3.7中使用winpcapy的方式有一些问题。还有其他人碰到过这种问题吗?你知道吗


Tags: importsizestringifdevicebuffercreatepcap
1条回答
网友
1楼 · 发布于 2024-04-27 03:41:59

您是如何获得winpcapy的?你知道吗

PyPI winpcapy package与Google代码中的historical winpcapy script不同。PyPI包公开了libpcap模块中的winpcapy.winpcapy_typesAPI。你知道吗

在原始的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)

相关问题 更多 >