Dav*_*vid 2 c c++ tcp pcap packet-sniffers
我正在使用pcap捕获我想要解析有效负载的TCP数据包.我的策略如下:
ETHERTYPE_IP(IP数据包)IPPROTO_TCP(TCP数据包)检查有效负载大小> 0 (size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header)).
解析有效负载(抓取主机URL)
我还没有开始解析有效载荷,因为我得到了不一致.下面是使用过滤器打印出10个捕获的TCP数据包的有效负载"host = www.google.com".
包号:3:TCP包:源端口:80目的端口:58723包中没有数据
数据包编号:4:TCP数据包:源端口:58723目标端口:80数据包中没有数据
数据包编号:5:TCP数据包:源端口:58723目标端口:80 有效负载: GET/HTTP/1.1主机:www.google.com用户代理:Mozilla/5.0(Macintosh; U; Intel Mac OS X 10_6_5; en- us)AppleWebKit/533.19.4(KHTML,类似Gecko)版本/ 5.0.3 Safari/533.19.4接受:application/xml,application/xhtml + xml,text/html; q = 0.9,text/plain; q = 0.8 ,image/png,/ ; q = 0.5 Accept-Language:en-us Accept-Encoding:gzip,deflate Cookie:THICNT = 25; SID = DQAAAKIAAAB2ktMrEftADifGm05WkZmlHQsiy1Z2v-连接:保持活着
包号码:6:TCP包:源端口:80目的端口:58723包中没有数据
包号码:7:TCP包:源端口:80目的端口:58723 有效载荷: \ 272\u\243\255\375\375}\336H\221\227\206\312~\322\317N\236\255A\343 #\ 226\370֤\ 245 [\ 327`\306ըnE\263\204\313\356\3268)p\344\301_Y\255\267\240\222x\364
数据包编号:8:TCP数据包:源端口:58723目标端口:80数据包中没有数据
包号码:9:TCP包:源端口:80目的端口:58723 有效载荷: HTTP/1.1 200 OK日期:星期一,2010年11月29日10:11:36 GMT到期:-1缓存控制:私有,最大 - 年龄= 0内容类型:text/html; charset = UTF-8内容编码:gzip服务器:gws内容长度:8806 X-XSS-Protection:1; mode = block\213
为什么有效载荷和端口存在差异?理想情况下,我只想解析数据包5之类的数据包.如何忽略像7和9这样的数据包?
只有通过分析内容.什么在IP或TCP标头中什么都不能标记"HTTP请求"数据包.甚至"连接中的第一个数据包"也不起作用,因为存在持久连接.
此外,要完全确定捕获所有URI,您需要重新组装TCP流并解析HTTP请求:URI可以拆分为两个或更多数据包.