如何抓取网络包?两个方法告诉你

显形“不可见”的网络包网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度 。
还别说,我自己在大学的时候,也是如此 。
直到工作后,认识了两大分析网络的利器:tcpdump 和 Wireshark,这两大利器把我们“看不见”的数据包,呈现在我们眼前,一目了然 。
唉,当初大学学习计网的时候,要是能知道这两个工具,就不会学的一脸懵逼 。

tcpdump 和 Wireshark 有什么区别?
tcpdump 和 Wireshark 就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器 。
  • tcpdump 仅支持命令行格式使用,常用在 linux 服务器中抓取和分析网络包 。
  • Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面 。
【如何抓取网络包?两个方法告诉你】所以,这两者实际上是搭配使用的,先用 tcpdump 命令在 Linux 服务器上抓包,接着把抓包的文件拖出到 windows 电脑后,用 Wireshark 可视化分析 。
当然,如果你是在 Windows 上抓包,只需要用 Wireshark 工具就可以 。
tcpdump 在 Linux 下如何抓包?
tcpdump 提供了大量的选项以及各式各样的过滤表达式,来帮助你抓取指定的数据包,不过不要担心,只需要掌握一些常用选项和过滤表达式,就可以满足大部分场景的需要了 。
假设我们要抓取下面的 ping 的数据包:
如何抓取网络包?两个方法告诉你

文章插图
 
要抓取上面的 ping 命令数据包,首先我们要知道 ping 的数据包是 icmp 协议,接着在使用 tcpdump 抓包的时候,就可以指定只抓 icmp 协议的数据包:
如何抓取网络包?两个方法告诉你

文章插图
 
那么当 tcpdump 抓取到 icmp 数据包后,输出格式如下:
如何抓取网络包?两个方法告诉你

文章插图
 

如何抓取网络包?两个方法告诉你

文章插图
 
从 tcpdump 抓取的 icmp 数据包,我们很清楚的看到 icmp echo 的交互过程了,首先发送方发起了 ICMP echo request 请求报文,接收方收到后回了一个 ICMP echo reply 响应报文,之后 seq 是递增的 。
我在这里也帮你整理了一些最常见的用法,并且绘制成了表格,你可以参考使用 。
首先,先来看看常用的选项类,在上面的 ping 例子中,我们用过 -i 选项指定网口,用过 -nn 选项不对 IP 地址和端口名称解析 。其他常用的选项,如下表格:
如何抓取网络包?两个方法告诉你

文章插图
tcpdump 常用选项类
接下来,我们再来看看常用的过滤表用法,在上面的 ping 例子中,我们用过的是 icmp and host 183.232.231.174,表示抓取 icmp 协议的数据包,以及源地址或目标地址为 183.232.231.174 的包 。其他常用的过滤选项,我也整理成了下面这个表格 。
如何抓取网络包?两个方法告诉你

文章插图
tcpdump 常用过滤表达式类
说了这么多,你应该也发现了,tcpdump 虽然功能强大,但是输出的格式并不直观 。
所以,在工作中 tcpdump 只是用来抓取数据包,不用来分析数据包,而是把 tcpdump 抓取的数据包保存成 pcap 后缀的文件,接着用 Wireshark 工具进行数据包分析 。
Wireshark 工具如何分析数据包?
Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面,同时,还内置了一系列的汇总分析工具 。
比如,拿上面的 ping 例子来说,我们可以使用下面的命令,把抓取的数据包保存到 ping.pcap 文件
如何抓取网络包?两个方法告诉你

文章插图
 
接着把 ping.pcap 文件拖到电脑,再用 Wireshark 打开它 。打开后,你就可以看到下面这个界面:
如何抓取网络包?两个方法告诉你

文章插图
 
是吧?在 Wireshark 的页面里,可以更加直观的分析数据包,不仅展示各个网络包的头部信息,还会用不同的颜色来区分不同的协议,由于这次抓包只有 ICMP 协议,所以只有紫色的条目 。
接着,在网络包列表中选择某一个网络包后,在其下面的网络包详情中,可以更清楚的看到,这个网络包在协议栈各层的详细信息 。比如,以编号 1 的网络包为例子:


推荐阅读