显形“不可见”的网络包

网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度。

还别说,我自己在大学的时候,也是如此。

直到工作后,认识了两大分析网络的利器:tcpdump 和 Wireshark,这两大利器把我们“看不见”的数据包,呈现在我们眼前,一目了然。

唉,当初大学学习计网的时候,要是能知道这两个工具,就不会学的一脸懵逼。

tcpdump 和 Wireshark 有什么区别?

tcpdump 和 Wireshark 就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。

  • tcpdump 仅支持命令行格式使用,常用在 Linux 服务器中抓取和分析网络包。
  • Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面。

所以,这两者实际上是搭配使用的,先用 tcpdump 命令在 Linux 服务器上抓包,接着把抓包的文件拖出到 Windows 电脑后,用 Wireshark 可视化分析。

当然,如果你是在 Windows 上抓包,只需要用 Wireshark 工具就可以。

tcpdump 在 Linux 下如何抓包?

tcpdump 提供了大量的选项以及各式各样的过滤表达式,来帮助你抓取指定的数据包,不过不要担心,只需要掌握一些常用选项和过滤表达式,就可以满足大部分场景的需要了。

假设我们要抓取下面的 ping 的数据包:




wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP


要抓取上面的 ping 命令数据包,首先我们要知道 ping 的数据包是 icmp 协议,接着在使用 tcpdump 抓包的时候,就可以指定只抓 icmp 协议的数据包:


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_抓包_02


那么当 tcpdump 抓取到 icmp 数据包后, 输出格式如下:


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_网络数据包抓取工具_03


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_Wireshark_04


从 tcpdump 抓取的 icmp 数据包,我们很清楚的看到 icmp echo 的交互过程了,首先发送方发起了 ICMP echo request 请求报文,接收方收到后回了一个 ICMP echo reply 响应报文,之后 seq 是递增的。

我在这里也帮你整理了一些最常见的用法,并且绘制成了表格,你可以参考使用。

首先,先来看看常用的选项类,在上面的 ping 例子中,我们用过 -i 选项指定网口,用过 -nn 选项不对 IP 地址和端口名称解析。其他常用的选项,如下表格:


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP_05

tcpdump 常用选项类


接下来,我们再来看看常用的过滤表用法,在上面的 ping 例子中,我们用过的是 icmp and host 183.232.231.174,表示抓取 icmp 协议的数据包,以及源地址或目标地址为 183.232.231.174 的包。其他常用的过滤选项,我也整理成了下面这个表格。


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP_06

tcpdump 常用过滤表达式类


说了这么多,你应该也发现了,tcpdump 虽然功能强大,但是输出的格式并不直观。

所以,在工作中 tcpdump 只是用来抓取数据包,不用来分析数据包,而是把 tcpdump 抓取的数据包保存成 pcap 后缀的文件,接着用 Wireshark 工具进行数据包分析。

Wireshark 工具如何分析数据包?

Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面,同时,还内置了一系列的汇总分析工具。

比如,拿上面的 ping 例子来说,我们可以使用下面的命令,把抓取的数据包保存到 ping.pcap 文件


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP_07


接着把 ping.pcap 文件拖到电脑,再用 Wireshark 打开它。打开后,你就可以看到下面这个界面:


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_网络数据包抓取工具_08


是吧?在 Wireshark 的页面里,可以更加直观的分析数据包,不仅展示各个网络包的头部信息,还会用不同的颜色来区分不同的协议,由于这次抓包只有 ICMP 协议,所以只有紫色的条目。

接着,在网络包列表中选择某一个网络包后,在其下面的网络包详情中,可以更清楚的看到,这个网络包在协议栈各层的详细信息。比如,以编号 1 的网络包为例子:


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP_09

ping 网络包


  • 可以在数据链路层,看到 MAC 包头信息,如源 MAC 地址和目标 MAC 地址等字段;
  • 可以在 IP 层,看到 IP 包头信息,如源 IP 地址和目标 IP 地址、TTL、IP 包长度、协议等 IP 协议各个字段的数值和含义;
  • 可以在 ICMP 层,看到 ICMP 包头信息,比如 Type、Code 等 ICMP 协议各个字段的数值和含义;

Wireshark 用了分层的方式,展示了各个层的包头信息,把“不可见”的数据包,清清楚楚的展示了给我们,还有理由学不好计算机网络吗?是不是相见恨晚

从 ping 的例子中,我们可以看到网络分层就像有序的分工,每一层都有自己的责任范围和信息,上层协议完成工作后就交给下一层,最终形成一个完整的网络包。


wireshark抓蓝牙包怎么过滤mac 抓包如何过滤mac地址_IP_10