一、抓包实战

网络抓包与分析常用的两个工具:tcpdump 和 Wireshark 。

  • tcpdump :仅支持命令行使用,一般在 Linux 服务器上抓取和分析网络包。
  • Wireshark :一般 tcpdump 抓取的数据包会保存在 .pcap 文件中,通过 Wireshark 可视化界面可以解析 .pcap 文件,一般在 Windows/Mac 系统上使用。

所以,这两个工具是搭配使用的,先用 tcpdump 命令在 Linux 服务器上抓包,接着把抓包的文件 .pcap 拖出到 Windows/Mac 电脑上,用 Wireshark 可视化分析。

  • tcpdump 在 Linux 下如何抓包?

向百度 ip 地址 220.181.111.1 发送请求,执行命令 ping -I eth0 -c 3 220.181.111.1,效果如下图所示:

其中命令涉及到的配置项含义如下:

-I eth0 表示指定从 eth0 网口发送数据包
-c 3    表示发出 3 个 icmp 数据包

因为 ping 命令的数据包是基于 icmp 协议的,所以接下来通过 tcpdump 命令抓取该数据包时就可以指定只抓 icmp 协议的数据包。

重开一个窗口,输入命令 tcpdump -i eth0 icmp and host 220.181.111.1 -nn 持续监听本机 eth0 网口,时刻准备抓取本机与 220.181.111.1 之间通信的数据包。其中命令用到的配置项含义如下:

-i eth0       表示抓取 eth0 网口的数据包
icmp          表示抓取 icmp 协议的数据包
host          表示抓取源地址的数据包
220.181.111.1 表示抓取目标地址220.181.111.1的数据包
-nn           表示不解析 IP 地址和端口号的名称

当在第一个窗口再次执行 ping -I eth0 -c 3 220.181.111.1 ,tcpdump 就会抓取到 icmp 数据包,输出格式如下:

时间戳 协议 源地址ip > 目的地址ip 网络包详细信息

具体内容如下图所示:

从 tcpdump 抓取到的 icmp 数据包,可以很清晰的看到 icmp echo 的交互过程。首先是发送方发起了 ICMP echo request 请求报文,接收方收到后回了一个 ICMP echo reply 响应报文,其中 seq = 1 表示这是第一次交互。由于一开始 ping 的时候指定 -c 3 ,所以 seq 递增到 3 ,表示 3 次交互全部抓取成功。

tcpdump 虽然功能强大,但是输出格式并不美观。在工作中 tcpdump 只是用来在 linux 系统上抓取数据包,不用来分析数据包。一般是把 tcpdump 抓取的数据包保存成 .pcap 后缀的文件,然后通过 Wireshark 工具进行数据包分析。将原来的 tcpdump 语句加入配置项 -w 文件名.pcap,即输入命令 :

tcpdump -i eth0 icmp and host 220.181.111.1 -w testPing.pcap

就会在 Linux 当前目录下保存为 testPing.pcap 的文件,后续拖入 Wireshark 做解析即可。

因为我在工作中没有实际用过 Wireshark 工具,所以具体的使用操作就不记录了,防止误人子弟。具体示例可以参考下面这篇文章。

参考文章:4.3 TCP 实战抓包分析 | 小林coding | Java面试学习

Categories:

Tags:

No responses yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注