情况如下:在我的场景中,我有 3 台计算机,A、B 和 C。
计算机 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
使用的结构?
是否可以在这里进行某种连接?