如何确定TCP数据包中数据有效负载的启动?

时间:2010-10-21 07:20:10

标签: c tcp raw-sockets

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

感谢。

1 个答案:

答案 0 :(得分:2)

检查RFC 793RFC 1122RFC 3168中的标头规范。一些标志会影响标题大小,最明显的是选项最大段大小字段。