2

TCP パケットを処理しています。このアプリケーションはスニファとして機能し、SIP パケットを構築します。一部の TCP SIP パケットはフラグメント化されているため、再構築する必要があります。

私がしていることは、最初に次を使用して最初の TCP 接続を処理することです。

packet = s.recvfrom(sipLocatorConfig.NETWORK_MAX_SIZE)

その後、データを取得し、断片化されている場合は残りを取得しますが、次を使用し.recvます:

socket.recv(sipLocatorConfig.NETWORK_TCP_MAX_SIZE)

2 番目のフラグメントを取得すると、使用時に最初に文字化けしたデータが表示されます.recv。これは、ETH、IP、TCP 情報であると想定しています。

M*?
M*?@{
QyE

この ETH、IP、および TCP ヘッダー情報を削除して、Packet からデータだけを抽出するにはどうすればよいですか? ありがとう

4

1 に答える 1

1

パケットは次のように解析できます。

  • 最初の 14 バイトはイーサネット ヘッダーです
  • 次の 20 バイトはおそらく ip ヘッダーです
  • 同様に、IPヘッダーから、使用しているプロトコルを抽出し、最終的にプロトコル参照を確認して、そこからデータを解析できます

例えば。TCP 接続パケットは次のようになります。eth_header+IP_header+TCP_Header+payload(data) 各ヘッダーには特定の長さがあり、ヘッダーから情報を抽出するには、Python で構造体モジュールを使用する必要があります (struct.unpack("","") を参照)。ヘッダー情報を抽出するには、ヘッダーの構造に関する知識も必要です。最後に、ペイロードの位置を計算し、最終的に抽出できます。

詳しくはこちらのリンクをご覧ください。お役に立てれば

于 2014-01-21T15:42:44.660 に答える