状況は次のとおりです。私のシナリオでは、A、B、Cの3台のコンピューターがあります。
コンピューターAはコンピューターBにデータを送信します。コンピューターBはこれらのパケットをpcapでキャプチャし、ヘッダーを追加し、チェックサムをやり直して、コンピューターCへの別のイーサネットインターフェイスから注入します。したがって、基本的にAはCに送信しますが、Cの観点からはデータはコンピューターBから来ています。
私の問題はこれです:キャプチャされたパケットの分析に関するTCPDUMPのチュートリアルに従って、オフセットを計算し、タイプキャストを使用してイーサネット、IP、およびtcpヘッダー構造を取得する方法を学びました。その方法を以下に示します。
ethernet = (struct sniff_ethernet*)(packet);
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
size_ip = IP_HL(ip)*4;
if (size_ip < 20) {
printf(" * Invalid IP header length: %u bytes\n", size_ip);
return;
}
tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);
size_tcp = TH_OFF(tcp)*4;
if (size_tcp < 20) {
printf(" * Invalid TCP header length: %u bytes\n", size_tcp);
return;
}
payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_tcp);
キャプチャしたパケットを挿入してコンピュータBからコンピュータCに送信したいので、送信元/宛先情報の一部を変更し、完了したらチェックサムを再計算する必要があります。ただし、私の問題は、このデータがイーサネットヘッダー、IPヘッダー、およびTCPヘッダーの構造に分割されているため、使用できるに戻すにはどうすればu_char
よいpcap_inject
ですか?
ここで何らかの連結を行うことは可能ですか?