10

Linux で Python を使用して raw ソケットを開こうとしています。

私の簡単なコード:

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のソリューションを使用すると、イーサネット ヘッダーも表示されます。したがって、パケットをどの程度「生」にしたいかによって異なります。

4

3 に答える 3

10

socket.AF_INET の代わりに socket.AF_PACKET を試してください。

于 2013-11-01T17:45:06.900 に答える
0

これは、ルートとしてエラーなしで実行されます。

#!/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))
于 2013-11-01T19:21:04.933 に答える