python raw socket:不支持协议

时间:2013-11-01 17:37:18

标签: python linux sockets

我正试图在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给出的解决方案是正确的。如果您想要所有数据包,请使用他的解决方案。 但是,还有另一种组合,

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

也有效。

在这种情况下,您将收到所有带有IP和TCP标头的TCP数据包。 如果您使用dstromberg的解决方案,您还将看到以太网标头。所以这取决于你想要你的数据包的原始程度如何~~

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

以root身份运行时没有错误:

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

答案 2 :(得分:-1)

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