在linux图形界面下,输入wiresharp,打开wiresharp界面,打开eth0网卡,监听网络。
以太网的帧结构为
那么很容易看出其中6c e8 73 4d a5 8c 位目的MAC地址 ,54 04 a6 20 059b为源MAC地址 0800为类型 ,IP数据报。以后的数据为IP数据报,接下来分析IP数据报格式。
IP数据包的头信息格式:
+-------------------------------------------------+
| 版本 (4位) |
+-------------------------------------------------+
| 首部长度(4位) |
+-------------------------------------------------+
| 服务类型(TOS)8位 |
+-------------------------------------------------+
| 数据包总长度(16位) |
+-------------------------------------------------+
| 标识ID号(16位) |
+-------------------------------------------------+
| 标志位(3位) |
+-------------------------------------------------+
| 片偏移(13位) |
+-------------------------------------------------+
| 生存时间(TTL)(8位) |
+-------------------------------------------------+
| 协议类型 (8位) |
+-------------------------------------------------+
| 首部校验和(16位) |
+-------------------------------------------------+
| 源IP地址(32位) |
+-------------------------------------------------+
| 目的IP地址 (32位) |
+-------------------------------------------------+
* IP选项(若有) (32位) *
+-------------------------------------------------+
* 数据 *
+-------------------------------------------------+
版本占3位 若为IPV4即为4 ,IPV6即为6,很显然此次捕获的版本为IPV4,首部长度(4位) 为5,需要乘以4,即为20字节长度。
服务类型(TOS)8位00,数据包总长度(16位) 为0034即为52个字节长度,此次包含20字节首部,和32字节数据。
标识ID号(16位) 为562c
标志位(3位) 为3位 010 R :保留 ;DF:不允许设置分片;MF:0没有更多的分片,1有分片。
因为没有分片,所以片偏移(13位) 为0,若有分片,为分片数据大小,进行连接数据使用。
生存时间(TTL)(8位) 为64,每经过一个网关,TTL进行减1,防止数据在网络上流荡。
协议类型 (8位)为6即为TCP ,UDP为17, ICMP为1
首部检验和为0x7b5 算法为
(1)将校验和字段置为0;
(2)对首部中(一般为20B)每个16位字进行二进制反码求和;
(3)将(2)中得到的和再取反码,即得checksum,写入校验和字段中
即0x4500 + 0x34 + 0x562c + 0x4000 + 0x4006 + 0xc0a8 + 0x10a + 0xdea1 + 0xc48e = 0x38047
0x8047 + 0x003 = 0x804a 0xffff - 0x804a = 0x7fb5 (003为进位)
没有选项,接下来是IP的数据。
接下来为TCP 传输控制协议 英文为Transmission Control Protocol ;
源端口号为6151
目的端口号为80
序号为
首部长度为32字节 0x80 = 128 bit = 32字节
码元比特位(6位)标志,置1有效,URG用于和紧急指针配合使用,发送紧急数据;ACK为指出确定号是否有效;PSH接收方应该尽快将这个报文交给应用层;RST重新连接;SYN同步序号用来请求建立连接;FIN用来释放连接;
窗口16位 :指定缓冲区大小,通告每次发送一个报文段时希望接收多少数据。
校验和
选项:
可以发现 此次的tcp包为3次握手的第一次