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 などの専用ライブラリを使用せずに)
ありがとう。