一、概述
几乎所有的数据包都是通过以太网来传输,所以使用 wireshark 抓取以太网数据包非常容易,这里我们以 DNS 数据包为例。
二、抓包
1. 准备数据
打开 wireshark,在筛选栏输入 dns,点击开始抓包,然后打开命令提示符,输入 ping www.baidu.com
,此时 wireshark 将会抓到以下数据:
网卡信息如下:
2. 数据分析
第一步是请求 dns 服务器地址解析 www.baidu.com
,本机 IP 为 192.168.123.181
,为源 IP 地址,目的 IP 是两个 dns 服务器地址。由于设置了两个 dns 服务器,所以分别发送了两个数据包。
这里是收到的返回数据包:
随便点开一个数据包查看数据内容:
这是一个完整的 dns 数据包,wireshark 已经很清楚的帮我们分好类了。直接点击 Ehternet II 直接就能看到数据包了,源 MAC 地址,目的 MAC 地址都已经帮我们标识好了,不得不说很强大。
以太网中首先是目的 MAC 地址,对本次请求来说,目的 MAC 地址是我设置的网关即路由器的 MAC 地址,Phicomm 是我用的斐讯路由器型号。
源 MAC 地址即是本机的网卡的物理地址,从上面的网卡信息可以看出来物理地址为 B8-76-3F-95-F0-5F
,也可以使用 ipconfig /all
命令查看。
然后随之而来的就是数据部分的以太类型,0x0800
表示这是一个 IPv4 数据包。
接下来的就是数据部分,即为以太网帧中的有效载荷部分,这里是 dns 数据包,以后再讨论。
3. 为什么没有报头和校验字段
从数据中我们没有发现 8 个字节的前导头和 4 个字节的校验字段,为什么呢?
因为前导头是用来给物理链路层中的物理接口用来识别的,以此来定位数据包的开始。当它收到数据包后会进行校验码计算,如果数据没有错误会去掉前导部分和校验部分,再交给以太网卡驱动程序,当驱动程序收到数据包时就不存在有这两个字段了。
而 wireshark 抓包是位于网卡的驱动程序之内的,所以抓到的包就不存在有前导头和校验数据。
评论