tcpdump 抓包工具¶
嗨,大家好!今天为大家带来一篇干货,介绍一款工程师和系统管理员必备的利器——tcpdump!
在 Windows 中常用 Wireshark,那么在 Linux 下也有一个常见工具叫 tcpdump。你是否遇到过这样的问题:
- 想知道某个应用程序到底在和哪些服务器通信?
- 怀疑网络中有异常流量,但不知道如何定位?
- 需要分析某个网络协议的具体交互过程?
什么是 tcpdump?¶
tcpdump 是一款强大的网络抓包工具,它可以在 Linux/Unix 系统上捕获和分析网络数据包。通过 tcpdump,我们可以清晰地看到网络中到底在发生什么,从而快速定位和解决网络问题。
快速上手¶
tcpdump 的基本命令格式非常简单:
- 选项:用于控制
tcpdump的行为,例如指定网卡、过滤条件等。 - 表达式:用于筛选出我们感兴趣的数据包。
示例 1:抓取指定网卡的所有数据包¶
sudo:tcpdump需要 root 权限才能运行。-i:-i选项用于指定要监听的网卡,ens33是网卡的名称。你可以使用ifconfig或ip addr命令查看你的网卡名称。
示例 2:只抓取 UDP 协议的数据包¶
我们在命令的末尾加上 udp 关键字,就可以只抓取 UDP 协议的包了。同理,如果想抓取 TCP 包,就使用 tcp 关键字。
示例 3:抓取特定端口的数据包¶
port 53:port关键字可以帮助我们筛选出特定端口的数据包,这里是 DNS 服务使用的 53 端口。
示例 4:将抓取结果保存到文件¶
-w capture.pcap:-w选项可以将抓取到的数据包保存到capture.pcap文件中。这个文件可以使用 Wireshark 等工具进行更详细的分析。
进阶用法¶
除了基本用法,tcpdump 还支持更复杂的过滤条件,让你能够更精确地捕获目标数据包。
组合过滤条件¶
我们可以使用 and、or 和 not 关键字来组合多个过滤条件。
- 抓取来自 192.168.1.100 并且目标端口是 80 的 TCP 包:
- 抓取目标是 192.168.1.1 或者 192.168.1.2 的包:
常用选项¶
| 选项 | 说明 |
|---|---|
-n | 不进行域名反解析,直接显示 IP 地址。 |
-nn | 不进行主机名和端口名解析。 |
-c N | 只抓取 N 个数据包。 |
-s 0 | 抓取完整的数据包,而不是截断。 |
-X | 同时以十六进制和 ASCII 码显示数据包内容。 |
实战演练:分析一次 DNS 查询¶
让我们来看一个实际的例子,分析一次 DNS 查询的过程。
- 打开一个终端,执行以下命令:
- 再打开另一个终端,执行
ping命令:
- 回到第一个终端,你会看到类似下面的输出:
22:19:17.750222 IP 192.168.1.39.36573 > 192.168.1.1.53: 38393+ A? www.baidu.com. (31)
22:19:17.750482 IP 192.168.1.39.48126 > 192.168.1.1.53: 35135+ AAAA? www.baidu.com. (31)
22:19:17.762914 IP 192.168.1.1.53 > 192.168.1.39.36573: 38393 3/5/9 CNAME www.a.shifen.com., A 183.240.99.224, A 111.45.11.5 (351)
22:19:17.763217 IP 192.168.1.1.53 > 192.168.1.39.48126: 35135 3/5/9 CNAME www.a.shifen.com., AAAA xxx:8c54:xx:187:0:ff:xxx:xxx, AAAA xxxx:8c54:870:310:0:ff:b0ed:40ac (375)

- 第一行是我们的电脑(192.168.1.39)向 DNS 服务器(192.168.1.1)的 53 端口发送了一个 DNS 查询请求,查询
www.baidu.com的 A 记录。 - 第二行是 DNS 服务器返回了查询结果,告诉我们
www.baidu.com的 IP 地址是111.45.11.5。
通过这个简单的例子,我们可以清晰地看到 DNS 查询的全过程。
总结¶
tcpdump 是一款功能强大且灵活的网络抓包工具。掌握了 tcpdump,你就能像侦探一样,洞察网络中的一举一动,无论是排查网络故障,还是学习网络协议,都将变得得心应手。
希望这篇文章能帮助你入门 tcpdump,并在实际工作中发挥它的威力。如果你有任何问题,欢迎在评论区留言讨论!
点赞、在看、转发,就是对我们最大的支持!