因为接着进行抓包过滤操作,下面简单补充一下过滤器的语法。
内容来源于Wireshark抓包使用指南 - 知乎 (zhihu.com)
协议过滤只要输入协议名(小写)就可以,本文就是选择过滤arp协议。
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的数据包。
tcp.port==80,过滤源主机或目的主机端口为80的数据包。
tcp.srcport==80,源主机端口为80的数据包。
tcp.dstport==80,目的主机端口为80的数据包。
http.request.method=="GET",过滤HTTP GET方法的数据包。
过滤多个条件组合时,可以使用and或or。
也可以按照数据包内容过滤,选中数据,右键、准备过滤器、选中。
可以看到有许多包被显示出来,在上面输入arp进行过滤,这是其中的一个包,意思是
169.254.255.255的mac地址是多少?请告诉我(10.39.19.204)
下面简单介绍下Wireshark不同区域代表什么。(具体包分析转2.4)
第一行——物理层信息
第二行——数据链层信息
第三行——ARP(请求)
这里借用下Wireshark抓包使用指南 - 知乎 (zhihu.com)的图
第一行的意思是:第9个帧,它的大小是56个字节。
展开之后的是详细信息 (阑尾了)
Interface id:接口ID
Interface description:接口说明,WLAN类型
第一行:Src后面的是发送方的mac地址,Dst后面的是接收方的mac地址,全是f表示的是该信息是Broadcast广播信息。
主要留意一下发送方MAC、IP,接收方MAC、IP,而由于是询问MAC地址,对应IP地址的MAC地址用全0表示(与上面数据链路层的全1不同,有点迷惑)。
左边的是数据包的十六进制表示,右边是ASCII码表示。
下面对比下ARP协议的各字段信息。
ARP协议字段图,来源于ARP 协议 - 云物互联 - 博客园 (cnblogs.com)
因为多次编辑,下面更换了另一条ARP请求,影响不大。
(数据对应的含义:帧序号,累积时间,发送MAC,目的MAC,协议,长度,信息)
添加补充:
后知后觉才发现,这条ARP请求的目的地址居然不是全f广播地址,这是为什么呢?
经过搜索得知,ARP缓存中的表项是有生存时间的,所以当设备要移除某一个表项时,会先发送上面这种ARP请求信息,这条信息是直接发送目的地址的,如果短时间内没有回复,就删除表项,如果回复了(应该)就保留。
那为什么不用广播地址?
原因很简单,ARP缓存里表项数量不少,移除表项操作也不少,如果每次移除都发送广播信息会影响网络的利用率。
信息来源于有些arp请求报文中为什么会有目的mac地址(不使用广播地址)
回到正题,我们看下它的十六进制信息。
PS:当选中十六进制某字段时,会在上面(中部区域)有相应的信息对照显示。
数据链路层的蓝色部分表示以太网目的地址。
表示为ARP类型。
表示为IPv4协议。
op类型为0001时为ARP请求,op类型为0002时为ARP应答。
棣属于地址冲突检测(ACD)机制,用于检测IP地址冲突,简单来说就是问一下这个IP有没有被用。
查看Address Resolution Protocol(ARP Probe)
发现Sender IP为0,这是避免其他设备存储发送方IP和MAC信息,Target IP为想要使用的IP地址。
接着观察发现,当2.4.1的ARP probe信息连续发送三次后,没有收到相关信息(ARP reply),然后就抓到了ARP announcement这个包。
ARP announcement也是棣属于ACD,发送广播表明这个IP地址被自己使用了。
查看Address Resolution Protocol(ARP Announcement)
Sender IP和Target IP都是10.39.29.79,其他设备会将Sender IP和Sender MAC存储进ARP缓存表。
应用场景:通常网口刚启动的时候发送。
作用:
1.确认是否有别人也使用了相同的IP,如果存在那么别的主机会响应这个信息,同时本机会报错。
2.当某IP地址的MAC地址被修改了,将会发送Gratuitous ARP信息申明。
查看Gratuitous ARP的Address Resolution Protocol(reply/Gratuitous ARP)
172.20.10.1回应自己的MAC是0e:d7:46:7b:6f:64,注意该帧为单播。
什么是ICMP?
因特网控制报文协议ICMP是一个差错报告机制,是TCP/IP协议簇中的一个重要子协议,通常被IP层或更高层协议(TCP/UDP)使用,属于网络层协议。
主要用于在IP主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。
这些控制信息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。
为什么需要ICMP?
在数据传输过程中,IP提供尽力而为的服务,即为了把数据包发送到目的地址尽最大努力。它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制,因此在数据包传输过程中,产生各种错误在所难免。
为了更有效地转发IP数据包和提高数据包交付成功的机会,ICMP应运而生。使用ICMP,当网络中数据包传输出现问题时,主机或设备就会向上层协议报告差错情况和提供有关异常情况的报告,使得上层协议能够通过自己的差错控制程序来判断通信是否正确,以进行流量控制和差错控制,从而保证服务质量。
内容来源于什么是ICMP?ICMP如何工作? - 华为 (huawei.com)
注意:在此之前开启Wireshark捕获。
输入id.addr==222.200.254.4对数据包进行过滤。
先查看下ICMP的报文格式。图来源于什么是ICMP?ICMP如何工作? - 华为 (huawei.com)
PS:ICMP报文首部有8个字节,图上只标出了4个字节,还有4个字节根据不同类型有不同的字段。
查看第56个帧的具体字段信息。
从下图可以看出,ICMP报文的类型Type为8,表明这是一个Echo请求报文(最常见的ping命令发送的报文),代码Code为0,检验和Checksum为0x4d52,标识Identifier为1,序号Sequence为9。
再看下第57个帧的报文字段信息。
从下图可以看出, 报文的类型Type变成了0,表明这是一个Echo相应报文。
TCP三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。
这里借用TCP三次握手详解_oOoOoOooOO的博客-CSDN博客_tcp三次握手的图。
下面是捕获到的三次握手的TCP报文。
我们看第一行的报文,53089和443分别表示联系双方的端口号,SYN表示这是建立连接的报文,序号Seq为0.
第二行,SYN、ACK表示这是建立连接的确认报文,序号Seq为0,确认号为1.
第三行,第三次握手发送确认报文建立连接。
这里借用的TCP四次挥手及原因 - GuoXinxin - 博客园 (cnblogs.com)图。
下面是捕获到的四次握手的TCP报文。
可以看到,10.39.23.92发送断开连接信息,222.200.254.4发送确认报文后接着发送断开连接报文,10.39.23.92发送确认报文,完成4次挥手。