如何确定 TCP 数据包中数据负载的开始?

发布于 2024-09-28 06:35:09 字数 480 浏览 2 评论 0原文

我正在编写使用原始套接字监控 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

待"谢繁草 2024-10-05 06:35:09

检查 RFC 793 中的标头规范,RFC 1122RFC 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文