2

raw ソケットを使用して FTP トラフィックを監視するプログラムを作成しています。これで、次のコードを使用して TCP パケット内のデータの開始を判断できます。

// char * packet;
// struct * iphdr;
// struct * tcphdr;

// ...
// check, whether sniffed ethernet frame contains IP and TCP 


char * data;
data = (packet + sizeof (struct ethhdr) + sizeof (struct tcphdr) + (header_ip->ihl * 4) + header_tcp->doff) + 4;

これは問題なく動作しますが、「魔法の」数字 4 をデータ ポインターに追加する必要があります。追加しないと、最終的な文字列は無意味な文字で始まります。

転送されたデータの開始を決定するためのクリーンなソリューションはありますか? (libcap などの専用ライブラリを使用せずに)

ありがとう。

4

1 に答える 1

2

RFC 793RFC 1122、およびRFC 3168のヘッダー仕様を確認してください。いくつかのフラグは、ヘッダー サイズに影響を与えます。最も明白なのは、オプション最大セグメント サイズフィールドです。

于 2010-10-21T07:36:46.813 に答える