Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python 3.5.2移动到python 3.7.4时出现winpcapy错误_Python_Windows_Winpcap - Fatal编程技术网

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

从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

我一直很高兴使用一些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_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_类型的导入失败。谢谢我没有代表,不能投票!