gpt4 book ai didi

python - 为什么这段 python 代码在 linux 中有效,但在 windows 中无效?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:15 25 4
gpt4 key购买 nike

我正在尝试检查捕获的数据包文件的位置。如果我在 ubuntu 中运行它,它工作得非常好,但是如果我在每次遇到 IPv6 数据包时切换并在 Windows 中运行它,它就会停止。我希望它像在 ubuntu 中那样跳过它并继续处理下一个数据包,但事实并非如此。只要遇到 v6 IP 地址,它就会停止 for 循环。

有什么办法解决这个问题吗?

def printPcap(pcap):
for (ts, buf) in pcap:
try:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
print '[+] Src: ' + src + ' --> Dst: ' + dst
print '[+] Src: ' + retGeoStr(src) + ' --> Dst: ' + retGeoStr(dst) + '\n'
except:
pass

如果我打印出错误,except catches 它会打印:

Packet IP wrong length for inet_ntoa

我很确定这是因为它是 IPv6 然后我希望它继续到下一个数据包,但它也打印出这个错误:

'str' object has no attribute 'src'

我认为这就是导致我出现问题的原因。

就像我说的那样,它可以正常工作,直到它到达那个 v6 地址,并且在 ubuntu 上也可以正常工作。我很困惑。

最佳答案

Packet IP wrong length for inet_ntoa

inet_ntoa 仅适用于 IPv4。它在一个系统上工作而不在另一个系统上工作的原因可能是因为您仅在其中一个系统上获得 IPv6 数据包。

来自 https://docs.python.org/2/library/socket.html 处的文档

socket.inet_ntoa(packed_ip) Convert a 32-bit packed IPv4 address (a string four characters in length) to its standard dotted-quad string representation (for example, ‘123.45.67.89’). This is useful when conversing with a program that uses the standard C library and needs objects of type struct in_addr, which is the C type for the 32-bit packed binary data this function takes as an argument.

If the string passed to this function is not exactly 4 bytes in length, socket.error will be raised. inet_ntoa() does not support IPv6, and inet_ntop() should be used instead for IPv4/v6 dual stack support.

关于python - 为什么这段 python 代码在 linux 中有效,但在 windows 中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com