x
首页 后端[PHP&MySql] 抓包分析TCP/IP结构,数据内容解析。

抓包分析TCP/IP结构,数据内容解析。

发表于 2014-06-20 - 浏览:9305 评论:0 收藏 0

首先了解个计量单位:

1字节=8位,8位是8个二进制位,

比如这个8位的二进制数:01010101, 有 8位,换算成16进制就是:55


然后开始分析下列抓取的数据包;

该数据包用下列命令抓到:

tcpdump -i en5 -nnX 'tcp' >> /tmp/tcp.txt 


这些数据在传输时候都为二进制,下面是二进制转换16进制的数据包

0x0000:  4500 0174 db7f 4000 4006 0000 c0a8 0146  E..t..@.@......F

0x0010:  65e2 443d fb9d 0050 0de9 0732 3c3d 92da  e.D=...P...2<=..

0x0020:  8018 2013 6d74 0000 0101 080a 67ed 3e33  ....mt......g.>3

0x0030:  8edd 0774 736b 6579 3d40 3647 3032 654e  ...tskey=@6G02eN

0x0040:  6370 303b 2070 7463 7a3d 3535 3263 3265  cp0;.ptcz=552c2e

0x0050:  3866 6235 6165 6331 3932 6566 3435 3636  8fb5aec192ef4566

0x0060:  6538 3837 3534 3134 6162 3839 3939 3536  e8875414ab899956

0x0070:  3930 3463 3832 3332 3731 3938 6662 6139  904c82327198fba9

0x0080:  6333 6465 6264 6433 6332 3b20 7171 6d75  c3debdd3c2;.qqmu

0x0090:  7369 635f 7569 6e3d 3b20 7171 6d75 7369  sic_uin=;.qqmusi

0x00a0:  635f 6b65 793d 3b20 7171 6d75 7369 635f  c_key=;.qqmusic_

0x00b0:  6672 6f6d 7461 673d 3b20 716d 5f75 7365  fromtag=;.qm_use

0x00c0:  726e 616d 653d 3330 3633 3431 3538 323b  rname=306341582;

0x00d0:  2071 6d5f 7369 643d 3737 3139 6565 6563  .qm_sid=7719eeec

0x00e0:  3733 3334 3030 3535 3636 6164 3734 6438  7334005566ad74d8

0x00f0:  3461 6365 3766 6635 2c63 2d41 3943 396d  4ace7ff5,c-A9C9m

0x0100:  3732 326c 512e 3b20 7074 6973 703d 6374  722lQ.;.ptisp=ct

0x0110:  633b 2072 656d 656d 6265 725f 6163 6374  c;.remember_acct

0x0120:  3d38 3231 3836 3931 3635 4071 712e 636f  =821869165@qq.co

0x0130:  6d3b 206d 656e 755f 6e65 775f 7374 6174  m;.menu_new_stat

0x0140:  7573 3d33 3038 3535 3330 3632 3925 3341  us=3085530629%3A

0x0150:  6675 6e63 7469 6f6e 2533 4474 7275 6525  function%3Dtrue%

0x0160:  3243 7365 7474 696e 6725 3344 7472 7565  2Csetting%3Dtrue

0x0170:  0d0a 0d0a                                ….   

包分析开始:

第一列略过:0x开头的是一个行号类的东西。


先来说下下面4行。

4500 0174 db7f 4000 4006 0000 c0a8 0146

65e2 443d fb9d 0050 0de9 0732 3c3d 92da

8018 2013 6d74 0000 0101 080a 67ed 3e33

8edd 0774 736b 6579 3d40 3647 3032 654e


先来贴个图,ip协议头构成:



如图所示:

每行有32位,1字节=8位二进制,1字节=2位十六进制。

图示一般情况下,ip协议部分有20字节(有时也会有24,28,32字节的情况,比较少见,这里主要就讲20字节的情况,具体多少位由IHL决定,一般情况都是5,为6就有24字节)。

先来分析第一行:4500 0174 db7f 4000 4006 0000 c0a8 0146

45:表示Version和IHL(Header Length)  ---- 1字节

00:Type of Service(TOS) --- 1字节

0174:Total Length(换算成十进制就是:372字节)--- 2字节

db7f:Identification --- 2字节

4000:为IP Flags和Fragment Offset,这还需要拆为二进制来分析.IP Flag占3位,Fragment Offset占13位。--- 2字节

4006:40为Timt To Live(TTL),经常ping一个ip地址的时候,后面就有那个ttl,一个协议访问的生存周期。  06为协议类型:06就是TCP协议了。--- 2字节

0000:Header Checksum --- 2字节

c0a8 0146:这个就是发送端的ip地址了,c0=192,a8=168,01=1,46=70;  组成就是192.168.1.70 --- 4字节

接下来分析第二行:65e2 443d fb9d 0050 0de9 0732 3c3d 92da

65e2 443d:目的ip地址。--- 4字节

然后20字节就结束了,这是ip部分。

---------------------------------------------------------------------------------------------------------------------------------------------------

因为ip部分已经表示了接下来的协议为06,即tcp协议,后面的数据以tcp结构来分析。

贴上tcp协议头构成:



继续分析上面没分析完的代码fb9d 0050 0de9 0732 3c3d 92da

fb9d:源端口

0050:目标端口

0de9 0732:序列号

3c3d 92da :确认号


下面开始分析第三行:8018 2013 6d74 0000 0101 080a 67ed 3e33 

80:8表示偏移(Offset),0是保留位,据说是以后扩展用的。

18:这是tcp的传输状态码:1表示 Ack,8表示Push。收到数据,并再发送的这个意思吧。

2013:是传输window的大小,这东西貌似是要跟服务端达成一致,然后传输数据的流量就根据这个来定,那个滑动窗口什么的。

6d74:是tcp部分的Checksum,

0000:是Urgent Pointer,紧急指针什么的。

(到此为止为tcp协议的固定部分,共20字节,下面的tcp协议的可变长度部分)

后面这部分就是TCP的Options了,长度不固定,总的来说是32位(4字节)的倍数,上图32位就是一行。

如果Options部分为空,这个offset就为5,其实也就是上图的5行(20字节),每行32位=4字节。

这里为8,就表示有8行,32字节,所以Options占了3行,12字节。

除去ip和tcp部分,剩下的就是传输的数据内容了。


剩下的就是数据包内容了。


下期讲述:

1.数据内容部分转换成assic码,

2.如何解析gzip数据包。


待研究内容:

一个包分为多次发送,如何把多个包并为一个包,(根据push,fin,ack,seq等状态码来进行处理)。





文章评论。。。