必须用 sudo 或 root 权限运行 tcpdump,否则因无权设混杂模式或访问原始套接字而报错;需明确指定网卡(如 -i eth0)、禁用解析(-nn),过滤表达式须加单引号,推荐保存为 pcap 文件分析。

直接上手就能抓,但不加过滤或权限控制,要么啥都看不到,要么抓到海量无关包卡死终端。
必须用 sudo 或 root 权限运行 tcpdump
普通用户无法将网卡设为混杂模式,也无权访问原始套接字 —— 这是 tcpdump 的硬性前提。不加 sudo 会报错:
tcpdump: eth0: You don't have permission to capture on that device
- 始终以
sudo tcpdump ...开头,别试图绕过 - 在容器或受限环境里(如某些 k8s pod),可能根本没权限,得换节点或改 SecurityContext
-
tcpdump -D可列出可用接口,但同样需要权限才能执行
指定网卡和禁用解析是基本操作
默认行为容易误导:它会自动选第一个非 loopback 接口(比如 eth0),但更常见的是你明确知道要监听哪块网卡;同时,默认开启 DNS 和端口名解析,会导致延迟、卡顿甚至抓包中断。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用
-i eth0明确指定,别依赖默认 —— 多网卡服务器上极易抓错口 - 务必加
-nn:禁用主机名 + 端口名解析,输出更快更稳定 -
-i any能监听所有接口,但会混入大量本地 loopback 流量,排查时慎用 - 如果不确定接口名,先跑
sudo tcpdump -D看编号和名称(如3.eth1)
按 IP 或端口过滤必须用单引号包裹表达式
shell 会提前解析空格、括号、&、| 等字符,导致过滤器失效或语法错误。这是新手最常踩的坑。
- 正确写法:
sudo tcpdump -i eth0 -nn 'host 192.168.1.100' - 错误写法:
sudo tcpdump -i eth0 -nn host 192.168.1.100(host被当成了独立参数) - 组合条件必须加引号:
'src 10.0.1.5 and dst port 443',否则 shell 把and当命令分隔符 - 过滤端口时注意方向:
dst port 80是进来的请求,src port 80是出去的响应,port 80是双向
保存 pcap 文件比实时看更实用
终端滚动太快,人眼跟不上,且无法回溯分析。真正排障时,几乎总是先存文件再用 wireshark 或 tcpdump -r 查。
- 用
-w capture.pcap保存原始二进制包,不丢信息,体积小 - 加
-c 100限制数量,避免磁盘写满:sudo tcpdump -i eth0 -nn -c 100 -w debug.pcap -
-s 0很关键:防止截断,默认只抓前 262144 字节,大包(如 TLS 握手、HTTP/2)会被砍掉,显示[|tcp]就是这个原因 - 后续分析用:
tcpdump -r debug.pcap -nn或直接拖进 Wireshark
真正难的不是语法,而是判断该抓什么、不该抓什么 —— 比如是否包含 loopback、是否要排除监控探针流量、是否需时间窗口限定。这些没法靠参数解决,得结合业务路径和网络拓扑来设计过滤表达式。










