我正在编写使用原始套接字监视 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 等)
谢谢。