数据抓包分析
| 分类: 路由交换 |
经常使用Wireshark等工具进行抓包,有一个困惑。就是如果有一天你仅仅给我一串16进制的数字。我如何分析报文?要想解决这个问题,至少我们需要学习进制转换,每一种数据封装的格式,顺序,内容字段长度等等。
http://s5/mw690/0041OZlcgy71i8zhX8wa4&690
我们大脑中都要有上面那一串数据的进制转换。第一行是10进制的,第二行则是2进制,第三行则是16进制。这是基础,理解了这一点,你才能明白你面对的那一串数据到底是什么含义。
我用的软件是GNS3+Wireshark分析。
http://s14/mw690/0041OZlcgy71i8APEzHed&690
图
首先为R1的接口f0/0开启了抓包功能,并配置IP地址。这时,R1会往接口f0/0发送无故ARP报文。我抓获了这段报文,如下:
http://s2/mw690/0041OZlcgy71i8EvJ6xd1&690
可以看到下面有一串16进制的数据。这段数据并不是毫无规律的放在那面。最左边填写了这整个报文的顺序。从0000到0010到0020……接下来我们说第几列的时候指的就是这个序列。
来看我们的报文,这是一个Gratuitous ARP报文,发出者是12.1.1.1,目的是Broadcast。这是从最上面的那一列我们得到的信息。
在看这个报文的结构,第一行是Frame 2,写的内容是我们整个报文的框架。点击这一行的时候,下面所有的16进制会被选中。第二行是Ethernet II,这是数据链路层了。这实际是一个以太网的帧结构。第三行是Address Resolution Protocol,地址解析协议,即ARP。
那我们数据分析从哪里开始呢?是从数据链路层开始的。
http://s16/mw690/0041OZlcgy71i8HWen5af&690
从0000行开始,就已经依次填写上了目的mac地址和源mac地址,并且写上了上层封装的协议Type。mac地址是2进制的48位组成,即6个字节,通常表示为12个16进制数。根据上图红色框标识。我们可以轻易的得出,目的mac为ff
ff ff ff ff ff
http://s9/mw690/0041OZlcgy71i8O4SH648&690
http://s11/mw690/0041OZlcgy71i8O7SRAba&690
现在R1ping12.1.1.2。
http://s9/mw690/0041OZlcgy71i8T9ZH288&690
http://s16/mw690/0041OZlcgy71i8TcNXN4f&690
ICMP的请求包:
http://s9/mw690/0041OZlcgy71i8WBXNS78&690
我们来看报文,这是一个ICMP的请求包,从最上蓝色的那一行我们可以看出,源IP是12.1.1.1目的IP是12.1.1.2。
首先看数据链路层:
http://s2/mw690/0041OZlcgy71i90JgdP11&690
看最下面的数据得出,mac地址是6字节的,目的mac在前源mac在后。目的mac为cc 02 1c d0 00
00
接下来我们来看IP数据包:
http://s8/mw690/0041OZlcgy71i93GHzx07&690
每个字段对应的数值:
http://s8/mw690/0041OZlcgy71i953LRZe7&690
首先我们看第1个字节为45。这里面包含了Version(版本)字段和IHL(头部长度)两个部分,每个部分都是4bit组成1个字节。我们可以看到版本是4,即这是一个IPV4报头。但是我们看到IHL写的是
来自百度:
头部长度是用32位表示的internet头部的长度,它指向数据的开始处.备注:一个正确头部的最小头部长度值是5.(译者注:5表示头部长度值为5*4=20
接下来是Differentiated Services Field(区分服务领域),默认00,1个字节长度。
Total Length,16bit,2字节。0x 0064即2进制0000 0000 0110 0100,即10进制100。
Identification: 0x0001 (1),2字节。
Flags: 0x00,1字节。
Fragment offset: 0,1字节。
Time to live: 255,ff,1字节。
Protocol: ICMP (1),01,1字节。
Header checksum: 0xa193 [validation disabled],a1 93,2字节。
Source: 12.1.1.1
Destination: 12.1.1.2,0c 01 01 02,目的IP地址。

加载中…