我正在尝试在 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的解决方案,您还将看到以太网标头。所以这取决于你希望你的数据包有多“原始”。