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

我想在Linux下用Python打开一个原始套接字

我简单的代码:

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

我得到这个错误:

 [ERROR] Protocol not supported 

顺便说一下,我使用的是Linux 12.04下的python 2.7.3,我用root来运行代码。

有人有线索吗?

更新:我的灵魂,dstromberg给出的解决scheme是正确的。 如果你想要所有的数据包,然后使用他的解决scheme。 不过,还有另外一个组合,

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

也有效。

在这种情况下,您将收到所有带有IP和TCP标头的TCP数据包。 如果你使用dstromberg的解决scheme,你也会看到以太网头。 所以这取决于你想要你的数据包是多么'生'

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

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

作为根运行没有错误:

 #!/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))