跳转至

tcpdump 抓包工具

嗨,大家好!今天为大家带来一篇干货,介绍一款工程师和系统管理员必备的利器——tcpdump

在 Windows 中常用 Wireshark,那么在 Linux 下也有一个常见工具叫 tcpdump。你是否遇到过这样的问题:

  • 想知道某个应用程序到底在和哪些服务器通信?
  • 怀疑网络中有异常流量,但不知道如何定位?
  • 需要分析某个网络协议的具体交互过程?

什么是 tcpdump?

tcpdump 是一款强大的网络抓包工具,它可以在 Linux/Unix 系统上捕获和分析网络数据包。通过 tcpdump,我们可以清晰地看到网络中到底在发生什么,从而快速定位和解决网络问题。

快速上手

tcpdump 的基本命令格式非常简单:

tcpdump [选项] [表达式]
  • 选项:用于控制 tcpdump 的行为,例如指定网卡、过滤条件等。
  • 表达式:用于筛选出我们感兴趣的数据包。

示例 1:抓取指定网卡的所有数据包

sudo tcpdump -i ens33
  • sudo: tcpdump 需要 root 权限才能运行。
  • -i: -i 选项用于指定要监听的网卡,ens33 是网卡的名称。你可以使用 ifconfigip addr 命令查看你的网卡名称。
  • image-20251203221550795

示例 2:只抓取 UDP 协议的数据包

sudo tcpdump -i ens33 udp

我们在命令的末尾加上 udp 关键字,就可以只抓取 UDP 协议的包了。同理,如果想抓取 TCP 包,就使用 tcp 关键字。

示例 3:抓取特定端口的数据包

sudo tcpdump -i ens33 port 53
  • port 53: port 关键字可以帮助我们筛选出特定端口的数据包,这里是 DNS 服务使用的 53 端口。

示例 4:将抓取结果保存到文件

sudo tcpdump -i ens33 -w capture.pcap
  • -w capture.pcap: -w 选项可以将抓取到的数据包保存到 capture.pcap 文件中。这个文件可以使用 Wireshark 等工具进行更详细的分析。

进阶用法

除了基本用法,tcpdump 还支持更复杂的过滤条件,让你能够更精确地捕获目标数据包。

组合过滤条件

我们可以使用 andornot 关键字来组合多个过滤条件。

  • 抓取来自 192.168.1.100 并且目标端口是 80 的 TCP 包:
sudo tcpdump -i ens33 'tcp and src host 192.168.1.100 and dst port 80'
  • 抓取目标是 192.168.1.1 或者 192.168.1.2 的包:
sudo tcpdump -i ens33 'dst host 192.168.1.1 or dst host 192.168.1.2'

常用选项

选项 说明
-n 不进行域名反解析,直接显示 IP 地址。
-nn 不进行主机名和端口名解析。
-c N 只抓取 N 个数据包。
-s 0 抓取完整的数据包,而不是截断。
-X 同时以十六进制和 ASCII 码显示数据包内容。

实战演练:分析一次 DNS 查询

让我们来看一个实际的例子,分析一次 DNS 查询的过程。

  1. 打开一个终端,执行以下命令:
sudo tcpdump -i ens33 -n udp port 53
  1. 再打开另一个终端,执行 ping 命令:
ping www.baidu.com
  1. 回到第一个终端,你会看到类似下面的输出:
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)

image-20251203222135603

  • 第一行是我们的电脑(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,并在实际工作中发挥它的威力。如果你有任何问题,欢迎在评论区留言讨论!


点赞、在看、转发,就是对我们最大的支持!