gpt4 book ai didi

python-3.x - 如何在 Ubuntu 上将 socket.ntohs(0x0003) 协议(protocol)与 python SOCK_RAW 一起使用?

转载 作者:行者123 更新时间:2023-12-04 18:32:01 25 4
gpt4 key购买 nike

当我使用 ntohs(0x0003) 时,我从 Python 得到一个 OSError作为 Ubuntu 上 SOCK_RAW 套接字的协议(protocol)参数。

  File "sniffer_all.py", line 44, in main
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.ntohs(0x0003))
File "/usr/lib/python3.5/socket.py", line 134, in __init__
_socket.socket.__init__(self, family, type, proto, fileno)
OSError: [Errno 22] Invalid argument

我检查了/etc/protocols 文件,它列出了 3 作为 GGP :
...
ggp 3 GGP # gateway-gateway protocol

如果配置了协议(protocol),我不知道为什么会出现这个错误。我正在使用 sudo 运行 python,所以我应该没有访问问题。

更换 socket.ntohs(0x0003)使用另一个协议(protocol),例如 socket.IPPROTO_UDP ,修复了错误,但限制了套接字可以处理的流量。

最佳答案

首先,sudo如果您想使用原始套接字,则需要 root 或 root,但您正在调用 socket()不正确。 socket()以主机字节顺序接受参数,但通过调用 ntohs()转换 3 的 8 位 GGP 协议(protocol)值到 16 位值 768这是错误的,因为最大可能的协议(protocol)值是 255 .

你可以这样做

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, 3)

或者以更易读的方式
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.getprotobyname('ggp'))

关于python-3.x - 如何在 Ubuntu 上将 socket.ntohs(0x0003) 协议(protocol)与 python SOCK_RAW 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39903931/

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