在日常开发和运维中,我们经常会遇到一些疑难杂症🤯 :
- 数据明明发出去了,对方却说没收到
- 程序已经跑起来了,数据却不对
这时候,抓包就是排查问题的利器,你可能会说,可以用Wireshark。
没错,而且我也写过一篇介绍的文章:
但是,在嵌入式环境下,我们往往用不了Wireshark ,此时 tcpdump 才是我们最得力的助手。
它是 Linux 下最轻量、最常用的抓包工具。
今天我们就来介绍下 tcpdump,掌握几个最常用的技巧,下次遇到网络问题时就不会一脸蒙圈了。🚀
✨ 基本用法
最常见的命令格式是:
tcpdump [选项] [过滤表达式]
👉 举个例子,抓取 eth0 网卡上的所有包:
tcpdump -i eth0
这里的 -i 就是指定网卡的意思。
⚡ 必备参数
平时使用时,以下几个参数可以说是“必带”的:
-nn👉 不做名字解析,IP 和端口号直接显示数字(更快、更清晰)-s 0👉 抓完整包(默认可能只截取部分数据)-vv👉 输出更详细的信息(-v/-vvv越多越详细)-l👉 立即刷新输出,不用傻等半天才看到结果
例如:
tcpdump -i eth0 -nn -vv -s 0 -l
这就是一条 “万能调试命令”,几乎所有场景都能用。😎
🔍 过滤表达式
tcpdump 的过滤能力非常强大,下面是一些常用的过滤方式:
1. 按主机过滤
tcpdump host 192.168.1.100
tcpdump src host 192.168.1.100
tcpdump dst host 192.168.1.200
2. 按端口过滤
tcpdump port 80
tcpdump src port 123
tcpdump dst port 22
3. 按协议过滤
tcpdump tcp
tcpdump udp
4. 组合条件
tcpdump src host 192.168.1.100 and dst port 80
tcpdump port 80 or port 443
📦 抓包结果的处理
有时候包太多,直接在终端里看会眼花。tcpdump 支持直接把数据保存到文件,再用 Wireshark 分析:
tcpdump -i eth0 -w out.pcap
如果要读取文件:
tcpdump -r out.pcap
👀 常见场景举例
- 抓取指定端口的 UDP 包:
tcpdump -i eth1 udp port 9500
- 抓取 gPTP 报文(以太网协议号 0x88f7):
tcpdump -i eth0 ether proto 0x88f7
🚦 使用小贴士
- 实时观察时加
-l,避免长时间没输出,经常配合grep使用。 - 不确定流量在哪个端口时,先抓大范围(比如
udp),再缩小范围。 - 要做深度分析时,使用
-s 0 -w file.pcap保存数据,然后用Wireshark打开。
🎯 总结
tcpdump 就像一把锋利的小刀 ✂️,轻便却强大。记住几个常用选项(-nn -vv -s 0 -l),掌握常用的过滤表达式,你就能快速定位大多数网络问题。
下次再遇到网络相关的问题,直接 tcpdump 开干吧!💪
本文首发于微信公众号《Linux在秋名山》,欢迎大家关注~

253

被折叠的 条评论
为什么被折叠?



