Pythonでrawソケットを使用して単純なパケットスニッファを作成しました。Python TCP rawソケットがlo(localhost/127.0.0.1)でリッスンしません
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
print s.recvfrom(1600)
インターネットトラフィックが表示されます。しかし、プライマリネットワークインターフェイスをオフにして、lo
インターフェイス(送信元と宛先127.0.0.1)を通じてscapyを使用してsynパケットを送信すると、何も印刷されません。
基本的には、ソースと宛先がwiresharkで表示される127.0.0.1のscapyを使用して10個のsynパケットを作成して送信します。しかし、このスニファではありません。私は長さの問題があるかもしれないと思った。だから、バッファサイズをsynパケットのサイズ、つまり74(s.recvfrom(74)
)に設定しましたが、それでも何もありません。プライマリネットワークインターフェイスを再び有効にするとすぐに、すべてのTCPトラフィックが表示されます。
自分で作成したトラフィック以外のトラフィックを受信しないように、ネットワークインターフェイスをオフにする必要があります。
ここで私はこれに間違っていますか? Linuxの
レベルが '0x000'なので、ソケット' 0x003'(ETH_ALL)を作成する必要があります。しかし、「データなしでパケットを受信する方法は?」という質問があります。そしてループバックを聞く必要がありますが、すべてのパケットはあなたのものではありません。着信パケットがあなたのものでない場合、インターネットインターフェース上の他のパケットを自動的に無視します。 – dsgdfg
ETH_ALLを@ dsgdfgの答えとして使用すると、イーサネットヘッダーが受信され、すべてのUDP、ICMP、TCPパケットが検出されます。私が 'loopback'で送るのはTCPだけです。だから私はそれを聞きたいのですが、私は何をすべきですか? – RatDon