如何确定 TCP 数据包中数据负载的开始?
我正在编写使用原始套接字监控 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 等)
谢谢。
I'm writing program for monitoring FTP traffic using raw sockets. Now, I am able to determine start of data in TCP packet using this code:
// 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;
This works fine, but I have to add the "magic" number 4 to data pointer. Without adding it, the final string starts with few meaningless characters.
Is there any clean solution how to determine start of transfered data? (without using any specialized libraries such as libcap etc.)
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
检查 RFC 793 中的标头规范,RFC 1122 和 RFC 3168。一些标志会影响标头大小,最明显的是选项和最大段大小字段。
Check the header specifications in RFC 793, RFC 1122, and RFC 3168. Some of the flags affect the header size, most obviously the options and maximum segment size fields.