服务公告

服务公告 > 技术教程 > tcpdump 过滤表达式速查:按主机、端口与协议

tcpdump 过滤表达式速查:按主机、端口与协议

发布时间:2025-11-23 08:08
抓包是网络排障的终极手段,应用日志与链路指标都说清不了的问题,包本身不会说谎。tcpdump 的门槛在过滤表达式:写对了,几秒钟就抓到关键流量;写不对,要么淹没在海量包里,要么把目标包过滤掉。表达式的语法是若干原语加逻辑词的组合,原语定义维度,逻辑词负责拼装,记住这条结构再去记具体写法就不容易乱。以下条目按日常组合频率排列,覆盖绝大多数场景。 ## 常用过滤条件 - 按主机:tcpdump host 192.168.1.10,双向流量都抓;src host 与 dst host 指定单方向 - 按端口:tcpdump port 443,端口是源或目的都匹配;port 53 抓 DNS 排解析问题 - 按协议:tcpdump icmp 直接抓 ping 包,排丢包时配合 mtr 使用 - 组合逻辑:and、or、not 连接条件,例如 host 10.0.0.5 and port 8080,括号可以改变优先级 条件从粗到细逐步收紧是稳妥的习惯:先按主机过滤确认有流量,再叠端口与方向,避免一上来就写复杂表达式,抓不到包时分不清是过滤错了还是真没流量。 ``` tcpdump -i eth0 -nn host 192.168.1.10 and port 443 -c 100 ``` -i 指定网卡,-nn 禁止域名与端口名反查,输出快也不产生额外查询流量,-c 限制抓包数量防止刷屏。 ## 落盘与回放 生产排查建议先落盘再分析,抓的时候轻,分析的时候重。 ``` tcpdump -i eth0 -w /tmp/issue.pcap port 8080 ``` 抓完用 tcpdump -r /tmp/issue.pcap 回放,或交给图形化工具打开看时间线。加 -s 0 保证完整抓取每个包,别用默认截断长度,否则应用层内容看不全。长时间落盘前先估一下量:按包速率乘时长粗算文件体积,磁盘紧张的机器上限定条数或时长,抓够证据就停,别让诊断动作自己变成故障源。 ## 收束 读包时看三件事:握手是否完整、重传是否频繁、连接由谁先断。SYN 无回应是路径或防火墙问题,大量重传指向链路质量,应用主动断与超时断的处理方向完全不同。初学阶段建议拿正常流量练读包,形成对正常样子的手感,异常才认得出来。顺云云服务器上遇到多方互相扯皮的连接问题,一段 pcap 文件就是最硬的证据,配合控制台带宽曲线定位时段,效率远高于口头描述。