首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析TCP数据包有效负载

如何解析TCP数据包有效负载
EN

Stack Overflow用户
提问于 2010-11-29 10:32:08
回答 3查看 13.2K关注 0票数 3

我使用pcap来捕获TCP数据包,我希望对这些数据包解析有效负载。我的策略如下:

(size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header)).

  • parse

  • 获取以太网报头并检查它是否具有ETHERTYPE_IP (IP数据包)

  • 类型,检查IP数据包是否有协议IPPROTO_TCP (TCP数据包)

  • 检查有效负载大小>0

  • 有效载荷(获取主机网址)

<代码>G 212

我还没有开始解析有效负载,因为我得到了不一致的信息。下面是使用过滤器"host = www.google.com"捕获的10个TCP数据包的有效负载的打印输出。

数据包号: 3:数据包:源端口: 80 Dest : 58723数据包中没有数据

数据包号: 4:数据包:源端口: 58723 Dest : 80没有数据包中的数据

数据包号: 5:TCP数据包:源端口: 58723 有效负载: GET / HTTP/1.1主机: www.google.com用户-代理: Mozilla/5.0 (Macintosh;U;Intel 10_6_5;en-us) AppleWebKit/533.19.4 (,类似Gecko) Version/5.0.3Safari/533.19.4接受: application/xml,application/xhtml+xml,text/html;q=0.9,text/平原;q=0.8,图像/png,/;接受-语言: en-us接受-编码: gzip,q=0.5 Cookie: THICNT=25;q=0.5连接:保持-活动

数据包号: 6:数据包:源端口: 80 Dest : 58723数据包中没有数据

数据包号: 7:TCP数据包:源端口: 80 Dest端口: 58723 有效负载: )p\344\301_Y\255\267\240\222x\364

数据包号: 8:数据包:源端口: 58723 Dest : 80没有数据包中的数据

数据包号: 9:TCP数据包:源端口: 80 有效负载: HTTP/1.1 200确定日期: Mon,2010年11月29日10:11:36 GMT到期:-1缓存控制:私有,最大年龄=0内容类型: text/html;charset=UTF-8内容编码: gzip服务器: gws内容长度: 8806 X-XSS-保护: 1;mode=block \213

为什么有效载荷和港口之间存在差异?理想情况下,我只想解析包5这样的数据包。我如何忽略像7和9这样的数据包?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-29 11:45:06

只有通过分析内容。在IP或TCP报头中没有任何东西可以标记"HTTP请求“数据包。即使是“连接中的第一个数据包”也无法工作,因为存在持久的连接。

另外,要完全确定捕获所有URI,您需要重新组装TCP流并解析HTTP请求:URI可以在两个或多个数据包上拆分。

票数 7
EN

Stack Overflow用户

发布于 2010-11-29 22:05:32

和IP报头一样,TCP报头也是可变长度的.你没有考虑到这一点。与其从总数据包大小中盲目地减去sizeof(struct tcp_header)),还需要在IP数据中定位the,然后使用它的length字段(它需要乘以4,就像IP报头长度字段那样)来知道实际的数据有效负载位于哪里。

票数 4
EN

Stack Overflow用户

发布于 2010-11-30 01:57:17

您的大小计算是不正确的-您不能按网络主机顺序进行减法,您必须首先将每个字段转换为主机字节顺序:

代码语言:javascript
复制
size = ntohs(ip_header->total_length) - ntohs(ip->header_length) * 4 - sizeof(struct tcp_header))

但是,正如Remy Lebeau所指出的,您实际上需要检查TCP中的offset字段,以了解有效负载从何处开始。

包5和包7之间的区别是前者从客户机到服务器,而后者是从服务器到客户端的响应。这就是为什么端口被切换的原因--源地址和目标地址也将被切换。

如果只想查看来自客户端的数据包,请检查源地址是否等于客户端的地址。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4302864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档