ペイロードを解析したい TCP パケットをキャプチャするために pcap を使用しています。私の戦略は次のとおりです。
- イーサネット ヘッダーを取得し、タイプ
ETHERTYPE_IP
(IP パケット)があるかどうかを確認します - IP パケットにプロトコル
IPPROTO_TCP
(TCP パケット)があるかどうかを確認する ペイロード サイズ > 0 を確認します
(size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header))
。ペイロードを解析する (ホスト URL を取得する)
不一致が発生しているため、ペイロードの解析をまだ開始していません。以下は、 filter を使用してキャプチャされた 10 個の TCP パケットのペイロードの出力"host = www.google.com"
です。
パケット番号: 3 : TCP パケット: ソース ポート: 80 宛先ポート: 58723 パケットにデータがありません
パケット番号: 4 : TCP パケット: 送信元ポート: 58723 送信先ポート: 80 パケットにデータがありません
パケット番号: 5 : TCP パケット: Source Port: 58723 Dest Port: 80 Payload: GET / HTTP/1.1 Host: www.google.com User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-米国) AppleWebKit/533.19.4 (Gecko のような KHTML) バージョン/5.0.3 Safari/533.19.4 Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8 ,image/png, / ;q=0.5 Accept-Language: en-us Accept-Encoding: gzip, deflate Cookie: THICNT=25; SID=DQAAAKIAAAB2ktMrEftADifGm05WkZmlHQsiy1Z2v- 接続: キープアライブ
パケット番号: 6 : TCP パケット: ソース ポート: 80 宛先ポート: 58723 パケットにデータがありません
パケット番号: 7 : TCP パケット: ソース ポート: 80 宛先ポート: 58723ペイロード: \272نu\243\255\375\375}\336H\221\227\206\312~\322\317N\236\255A\343 #\226\370˙\245[\327`\306\nE\263\204\313\356\3268 )p\344\301_Y\255\267\240\222x\364
パケット番号: 8 : TCP パケット: ソース ポート: 58723 宛先ポート: 80 パケットにデータがありません
パケット番号: 9 : TCP パケット: ソース ポート: 80 送信先ポート: 58723ペイロード: HTTP/1.1 200 OK 日付: 2010 年 11 月 29 日月曜日 10:11:36 GMT 有効期限: -1 キャッシュ制御: プライベート、最大年齢 = 0 コンテントタイプ: text/html; charset=UTF-8 Content-Encoding: gzip サーバー: gws Content-Length: 8806 X-XSS-Protection: 1; モード=ブロック \213
ペイロードとポートに不一致があるのはなぜですか? 理想的には、パケット 5 のようなパケットのみを解析したいと考えています。7 や 9 のようなパケットを無視するにはどうすればよいですか?