【问题标题】:How to determine start of data payload in TCP packet?如何确定 TCP 数据包中数据有效负载的开始?
【发布时间】:2011-04-28 11:04:28
【问题描述】:

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

谢谢。

【问题讨论】:

  • 你到底指的是什么struct tcphdr

标签: c tcp raw-sockets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2016-05-24
    • 1970-01-01
    • 2010-09-10
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多