1

特定のクライアントからのパケットの盗聴について質問があります。次のように、非常に単純なUDPサーバーを実行しています。

from socket import *

IPv4 = ""
Port = 54345

ServerSock = socket(AF_INET, SOCK_DGRAM) # UDP
ServerSock.bind((IPv4, Port))
print "Socket is ready to receive data.."

while True:
    data, addr = ServerSock.recvfrom(1024) # buffer size is 1024 bytes
    print data

ポート番号 (54345) に到達するすべてのパケットをキャプチャし、そのヘッダー値を解析するつもりです。パケットが .pcap ファイルに保存され、おそらく scapy を使用してそれらを処理する場合は実行可能だと思いますが、「socket.recvfrom」を使用して到着したすべてのパケットを処理することは可能ですか? ありがとう

4

2 に答える 2

1

すでにデータを取得しています。ただし、得られるのは UDP パケットと送信元アドレスです。IPv4 ヘッダーと UDP ヘッダーを含む完全な未加工のパケットが必要な場合、それは異なります。

一部のプラットフォームでは、通常の UDP ソケットを に設定できますIP_HDRINCL。または、他の同等のものがあります。これを行うと、それぞれrecvfromがデータにヘッダーを含めるため、必要なものはすべて揃っています。

他のプラットフォームでは、SOCK_RAW代わりにSOCK_DGRAM. raw ソケットでできることは劇的に異なります。多くの Unix プラットフォームでは、 with を使用IPPROTO_UDPしてSOCK_RAWからbind、通常の UDP アドレスとポートを使用できますが、制限がある場合があり、プラットフォームごとに異なります。たとえば、OS X では、raw ソケットを作成するには root になる必要があり、raw ソケットをバインドできるのは単一のインターフェイス アドレス ( ''/ INADDR_ANY/がないことを意味します'0.0.0.0') だけです。「SOCK_RAW Python」と「SOCK_RAW」をグーグルで検索すると、必要なものを見つけることができるはずです。( sockets モジュールのドキュメントの最後の例は、Windows で raw ソケットを使用する方法を示しています。)

データを取得したら、それをpcapファイルに保存するのは難しくありません。この形式は、The Wireshark Wiki のLibpcapFileFormatに記載されています。stdlib モジュールに精通していれば、structこの形式の書き方を簡単に理解できるはずです。簡単なサンプルを次に示します。

pcap_hdr = struct.pack('=IHHiIII',
                       0xa1b2c3d4, # magic number
                       2, 4,       # pcap 2.4 format
                       0,          # UTC timezone for timestamps
                       0,          # "in practice, all tools set it to 0"
                       65535,      # max packet length
                       228)        # LINKTYPE_IPV4, or maybe you want LINKTYPE_RAW
pcapfile.write(pcap_hdr)

自分でやりたくない場合は、ライブラリを使用して pcap ファイルを作成した経験はありませんがscapy、最初に調べる場所、次に/のpython-libpcapバインディングを調べます。これらのいずれも機能しない場合は、PyPI を確認してください。libpcapWinPcap

これらすべてがあなたの理解を超えているように聞こえる場合は、おそらく、この方法で物事を行いたくないでしょう。UDP サーバーを実行し、Wireshark を使用して、送信されたすべてのパケットをキャプチャします。

于 2013-01-07T23:07:00.227 に答える
0

はい、可能です。それはあなたのプログラムがすでに実際に行っていることです。

于 2013-01-07T21:05:53.390 に答える