1.选择WLAN抓包

centos7过滤ICMP wireshark过滤icmp协议_网络

因为接着进行抓包过滤操作,下面简单补充一下过滤器的语法。

1.1.过滤器语法

内容来源于Wireshark抓包使用指南 - 知乎 (zhihu.com)

1.1.1.协议过滤

协议过滤只要输入协议名(小写)就可以,本文就是选择过滤arp协议。

1.1.2.ip过滤

ip.src==192.168.1.104,过滤源地址为192.168.1.104的数据包。

ip.dst==192.168.1.104,过滤目的地址为192.168.1.104的数据包。

ip.addr==192.168.1.104,过滤源地址或目标地址为192.168.1.104的数据包。

1.1.3.端口过滤

tcp.port==80,过滤源主机或目的主机端口为80的数据包。

tcp.srcport==80,源主机端口为80的数据包。

tcp.dstport==80,目的主机端口为80的数据包。

1.1.4.Http模式过滤

http.request.method=="GET",过滤HTTP GET方法的数据包。

1.1.5.更多

过滤多个条件组合时,可以使用and或or。

也可以按照数据包内容过滤,选中数据,右键、准备过滤器、选中。

2.ARP抓包分析

2.1.过滤arp协议,开始抓包(分析转2.4)

centos7过滤ICMP wireshark过滤icmp协议_p2p_02

可以看到有许多包被显示出来,在上面输入arp进行过滤,这是其中的一个包,意思是

169.254.255.255的mac地址是多少?请告诉我(10.39.19.204)

下面简单介绍下Wireshark不同区域代表什么。(具体包分析转2.4) 

2.2.中间区域信息

centos7过滤ICMP wireshark过滤icmp协议_IP_03

第一行——物理层信息

第二行——数据链层信息

第三行——ARP(请求)

这里借用下Wireshark抓包使用指南 - 知乎 (zhihu.com)的图

centos7过滤ICMP wireshark过滤icmp协议_p2p_04

2.2.1.物理层信息

centos7过滤ICMP wireshark过滤icmp协议_网络协议_05

第一行的意思是:第9个帧,它的大小是56个字节。

展开之后的是详细信息 (阑尾了)

Interface id:接口ID

Interface description:接口说明,WLAN类型

2.2.2.数据链路层信息

centos7过滤ICMP wireshark过滤icmp协议_p2p_06

第一行:Src后面的是发送方的mac地址,Dst后面的是接收方的mac地址,全是f表示的是该信息是Broadcast广播信息。

2.2.3.ARP(请求)

centos7过滤ICMP wireshark过滤icmp协议_网络_07

主要留意一下发送方MAC、IP,接收方MAC、IP,而由于是询问MAC地址,对应IP地址的MAC地址用全0表示(与上面数据链路层的全1不同,有点迷惑)。 

2.3.底部区域信息

centos7过滤ICMP wireshark过滤icmp协议_网络_08

左边的是数据包的十六进制表示,右边是ASCII码表示。 

下面对比下ARP协议的各字段信息。 

ARP协议字段图,来源于ARP 协议 - 云物互联

centos7过滤ICMP wireshark过滤icmp协议_centos7过滤ICMP_09

因为多次编辑,下面更换了另一条ARP请求,影响不大。

(数据对应的含义:帧序号,累积时间,发送MAC,目的MAC,协议,长度,信息)

centos7过滤ICMP wireshark过滤icmp协议_网络协议_10

添加补充:

后知后觉才发现,这条ARP请求的目的地址居然不是全f广播地址,这是为什么呢?

经过搜索得知,ARP缓存中的表项是有生存时间的,所以当设备要移除某一个表项时,会先发送上面这种ARP请求信息,这条信息是直接发送目的地址的,如果短时间内没有回复,就删除表项,如果回复了(应该)就保留。

那为什么不用广播地址?

原因很简单,ARP缓存里表项数量不少,移除表项操作也不少,如果每次移除都发送广播信息会影响网络的利用率。


信息来源于有些arp请求报文中为什么会有目的mac地址(不使用广播地址)

回到正题,我们看下它的十六进制信息。

PS:当选中十六进制某字段时,会在上面(中部区域)有相应的信息对照显示。

2.3.1.以太网目的地址

数据链路层的蓝色部分表示以太网目的地址。

centos7过滤ICMP wireshark过滤icmp协议_IP_11

2.3.2.以太网源地址

centos7过滤ICMP wireshark过滤icmp协议_centos7过滤ICMP_12

2.3.3.帧类型

表示为ARP类型。

centos7过滤ICMP wireshark过滤icmp协议_网络协议_13

2.3.4.硬件类型

centos7过滤ICMP wireshark过滤icmp协议_网络_14

2.3.5.协议类型

表示为IPv4协议。

centos7过滤ICMP wireshark过滤icmp协议_IP_15

2.3.6.硬件地址长度

centos7过滤ICMP wireshark过滤icmp协议_IP_16

2.3.7.协议地址长度

centos7过滤ICMP wireshark过滤icmp协议_p2p_17

2.3.8.op

op类型为0001时为ARP请求,op类型为0002时为ARP应答。

 

centos7过滤ICMP wireshark过滤icmp协议_网络_18

2.3.9.发送端以太网地址

centos7过滤ICMP wireshark过滤icmp协议_网络_19

2.3.10.发送端IP地址

 

centos7过滤ICMP wireshark过滤icmp协议_p2p_20

2.3.11.目的以太网地址

centos7过滤ICMP wireshark过滤icmp协议_centos7过滤ICMP_21

2.3.12.目的IP地址

centos7过滤ICMP wireshark过滤icmp协议_IP_22

2.4.具体包分析

2.4.1.ARP probe

centos7过滤ICMP wireshark过滤icmp协议_centos7过滤ICMP_23

棣属于地址冲突检测(ACD)机制,用于检测IP地址冲突,简单来说就是问一下这个IP有没有被用。

查看Address Resolution Protocol(ARP Probe) 

centos7过滤ICMP wireshark过滤icmp协议_网络协议_24

发现Sender IP为0,这是避免其他设备存储发送方IP和MAC信息,Target IP为想要使用的IP地址。

2.4.2.ARP announcement

接着观察发现,当2.4.1的ARP probe信息连续发送三次后,没有收到相关信息(ARP reply),然后就抓到了ARP announcement这个包。

centos7过滤ICMP wireshark过滤icmp协议_网络协议_25

ARP announcement也是棣属于ACD,发送广播表明这个IP地址被自己使用了。

查看Address Resolution Protocol(ARP Announcement) 

centos7过滤ICMP wireshark过滤icmp协议_IP_26

Sender IP和Target IP都是10.39.29.79,其他设备会将Sender IP和Sender MAC存储进ARP缓存表。

2.4.3.Gratuitous ARP

centos7过滤ICMP wireshark过滤icmp协议_IP_27

应用场景:通常网口刚启动的时候发送。


作用:

1.确认是否有别人也使用了相同的IP,如果存在那么别的主机会响应这个信息,同时本机会报错。 

2.当某IP地址的MAC地址被修改了,将会发送Gratuitous ARP信息申明。

查看Gratuitous ARP的Address Resolution Protocol(reply/Gratuitous ARP) 

centos7过滤ICMP wireshark过滤icmp协议_网络协议_28

2.4.4.询问mac地址并得到回应

centos7过滤ICMP wireshark过滤icmp协议_IP_29

172.20.10.1回应自己的MAC是0e:d7:46:7b:6f:64,注意该帧为单播。

2.4.5.流程图总结

centos7过滤ICMP wireshark过滤icmp协议_IP_30

3.ICMP和TCP抓包

3.1.ICMP

什么是ICMP?

因特网控制报文协议ICMP是一个差错报告机制,是TCP/IP协议簇中的一个重要子协议,通常被IP层或更高层协议(TCP/UDP)使用,属于网络层协议。

主要用于在IP主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。

这些控制信息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。


为什么需要ICMP?

在数据传输过程中,IP提供尽力而为的服务,即为了把数据包发送到目的地址尽最大努力。它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制,因此在数据包传输过程中,产生各种错误在所难免。

为了更有效地转发IP数据包和提高数据包交付成功的机会,ICMP应运而生。使用ICMP,当网络中数据包传输出现问题时,主机或设备就会向上层协议报告差错情况和提供有关异常情况的报告,使得上层协议能够通过自己的差错控制程序来判断通信是否正确,以进行流量控制和差错控制,从而保证服务质量。


内容来源于什么是ICMP?ICMP如何工作

3.2.ping www.163.com

注意:在此之前开启Wireshark捕获。

centos7过滤ICMP wireshark过滤icmp协议_IP_31

3.3.分析ICMP数据包

输入id.addr==222.200.254.4对数据包进行过滤。

centos7过滤ICMP wireshark过滤icmp协议_p2p_32

先查看下ICMP的报文格式。图来源于什么是ICMP?ICMP如何工作?

PS:ICMP报文首部有8个字节,图上只标出了4个字节,还有4个字节根据不同类型有不同的字段。

 

centos7过滤ICMP wireshark过滤icmp协议_网络_33

 查看第56个帧的具体字段信息。

centos7过滤ICMP wireshark过滤icmp协议_网络_34

从下图可以看出,ICMP报文的类型Type为8,表明这是一个Echo请求报文(最常见的ping命令发送的报文),代码Code为0,检验和Checksum为0x4d52,标识Identifier为1,序号Sequence为9。

centos7过滤ICMP wireshark过滤icmp协议_p2p_35

再看下第57个帧的报文字段信息。

centos7过滤ICMP wireshark过滤icmp协议_p2p_36

从下图可以看出, 报文的类型Type变成了0,表明这是一个Echo相应报文。

centos7过滤ICMP wireshark过滤icmp协议_IP_37

3.4.TCP建立连接的三次握手

TCP三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。

这里借用TCP三次握手详解_oOoOoOooOO的博客_tcp三次握手的图。

centos7过滤ICMP wireshark过滤icmp协议_网络协议_38

下面是捕获到的三次握手的TCP报文。

centos7过滤ICMP wireshark过滤icmp协议_网络协议_39

我们看第一行的报文,53089和443分别表示联系双方的端口号,SYN表示这是建立连接的报文,序号Seq为0.

第二行,SYN、ACK表示这是建立连接的确认报文,序号Seq为0,确认号为1.

第三行,第三次握手发送确认报文建立连接。

3.5.TCP断开连接的四次挥手

这里借用的TCP四次挥手及原因 - GuoXinxin -图。

centos7过滤ICMP wireshark过滤icmp协议_网络协议_40

下面是捕获到的四次握手的TCP报文。 

centos7过滤ICMP wireshark过滤icmp协议_IP_41

可以看到,10.39.23.92发送断开连接信息,222.200.254.4发送确认报文后接着发送断开连接报文,10.39.23.92发送确认报文,完成4次挥手。