python原始套接字:不支持协议

2024-04-23 17:37:35 发布

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

我试图在linux下用Python打开一个原始套接字。

我的简单代码:

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 5454))

我犯了个错误:

[ERROR] Protocol not supported

顺便说一下,我使用的是Linux12.04下的Python2.7.3,我使用的是根来运行代码。

有人知道吗?

更新:dstromberg给出的The solution是正确的。如果你想要整包,那就用他的解决方案。然而,还有另一种组合:

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

这也管用。

在这种情况下,您将收到一个包含IP和TCP头的完整TCP数据包。 如果您使用dstromberg的解决方案,您还将看到以太网头。所以这取决于你想要你的包有多粗糙。


Tags: 代码iphostrawbindlinux错误socket
3条回答

以根用户身份运行时不会出错:

#!/usr/local/cpython-3.3/bin/python

import socket as socket_mod

#s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
socket = socket_mod.socket(socket_mod.AF_PACKET, socket_mod.SOCK_RAW, socket_mod.IPPROTO_IP)
#socket.bind(('localhost', 5454))
socket.bind(('lo', 5454))

试试socket.AF_UNIX,它可以解决你的问题,祝你好运。

尝试socket.AF_PACKET而不是socket.AF_INET。

相关问题 更多 >