网络不通?延迟太高?教你用 tcpdump 三步定位罪魁祸首 📅 发布时间:2026/7/15 10:46:10 👁️ 浏览次数: Wireshark虽然好用但服务器上通常没有图形界面。tcpdump是Linux下最常用的命令行抓包工具排查网络问题、分析协议、定位连接异常都离不开它。本文整理tcpdump的常用技巧从基础语法到实际问题排查配合真实场景案例。1. 基础用法1.1 最简单的抓包# 抓取eth0网卡的所有流量 tcpdump -i eth0 # 抓取所有网卡 tcpdump -i any # 指定抓取数量 tcpdump -i eth0 -c 1001.2 常用参数# -n不解析主机名速度快 # -nn不解析主机名和端口名 tcpdump -i eth0 -nn # -v/-vv/-vvv详细程度递增 tcpdump -i eth0 -vv # -X同时以十六进制和ASCII显示包内容 tcpdump -i eth0 -X # -A以ASCII显示包内容适合HTTP tcpdump -i eth0 -A # -s0抓取完整数据包默认只抓前96字节 tcpdump -i eth0 -s0 # -w保存到文件可用Wireshark打开 tcpdump -i eth0 -w capture.pcap # -r读取抓包文件 tcpdump -r capture.pcap1.3 组合使用# 常用组合不解析、完整包、保存文件 tcpdump -i eth0 -nn -s0 -w /tmp/capture.pcap # 边抓边看同时保存 tcpdump -i eth0 -nn -U -w /tmp/capture.pcap tail -f /tmp/capture.pcap | tcpdump -r -2. 过滤表达式tcpdump强大之处在于过滤表达式精准抓取需要的流量。2.1 按主机过滤# 抓取与192.168.1.100通信的所有流量 tcpdump -i eth0 host 192.168.1.100 # 抓取源地址为192.168.1.100 tcpdump -i eth0 src host 192.168.1.100 # 抓取目标地址为192.168.1.100 tcpdump -i eth0 dst host 192.168.1.100 # 抓取与多个主机通信 tcpdump -i eth0 host 192.168.1.100 or host 192.168.1.101 # 排除某个主机 tcpdump -i eth0 not host 192.168.1.1002.2 按端口过滤# 抓取80端口流量 tcpdump -i eth0 port 80 # 抓取源端口为80 tcpdump -i eth0 src port 80 # 抓取目标端口为80 tcpdump -i eth0 dst port 80 # 抓取端口范围 tcpdump -i eth0 portrange 8000-9000 # 抓取多个端口 tcpdump -i eth0 port 80 or port 443 or port 80802.3 按协议过滤# 只抓TCP tcpdump -i eth0 tcp # 只抓UDP tcpdump -i eth0 udp # 只抓ICMPping tcpdump -i eth0 icmp # 只抓ARP tcpdump -i eth0 arp2.4 按网段过滤# 抓取192.168.1.0/24网段 tcpdump -i eth0 net 192.168.1.0/24 # 抓取源网段 tcpdump -i eth0 src net 10.0.0.0/82.5 按TCP标志位过滤# 抓取SYN包新连接 tcpdump -i eth0 tcp[tcpflags] tcp-syn ! 0 # 抓取SYNACK包 tcpdump -i eth0 tcp[tcpflags] (tcp-syn|tcp-ack) (tcp-syn|tcp-ack) # 抓取FIN包连接关闭 tcpdump -i eth0 tcp[tcpflags] tcp-fin ! 0 # 抓取RST包连接重置 tcpdump -i eth0 tcp[tcpflags] tcp-rst ! 0 # 简写方式 tcpdump -i eth0 tcp[13] 2 ! 0 # SYN tcpdump -i eth0 tcp[13] 1 ! 0 # FIN tcpdump -i eth0 tcp[13] 4 ! 0 # RST2.6 组合过滤# 抓取到MySQL的流量 tcpdump -i eth0 dst port 3306 and dst host 192.168.1.100 # 抓取HTTP请求排除SSH tcpdump -i eth0 port 80 and not port 22 # 抓取指定IP的TCP SYN包 tcpdump -i eth0 host 192.168.1.100 and tcp[tcpflags] tcp-syn ! 0 # 复杂组合抓取从web服务器到数据库的非SSH流量 tcpdump -i eth0 src host 192.168.1.10 and dst host 192.168.1.20 and not port 223. 输出解读3.1 TCP包格式14:22:31.123456 IP 192.168.1.10.45678 192.168.1.20.80: Flags [S], seq 123456, win 64240, length 0各部分含义14:22:31.123456时间戳192.168.1.10.45678源IP.端口192.168.1.20.80目标IP.端口Flags [S]TCP标志位seq 123456序列号win 64240窗口大小length 0数据长度3.2 TCP标志位标志含义SSYN发起连接.ACK确认FFIN关闭连接RRST重置连接PPSH推送数据S.SYNACKF.FINACK3.3 三次握手示例# 客户端发SYN 14:22:31.001 IP 10.0.0.1.45678 10.0.0.2.80: Flags [S], seq 100 # 服务端回SYNACK 14:22:31.002 IP 10.0.0.2.80 10.0.0.1.45678: Flags [S.], seq 200, ack 101 # 客户端发ACK 14:22:31.003 IP 10.0.0.1.45678 10.0.0.2.80: Flags [.], ack 2014. 实战场景4.1 排查连接超时服务调用超时先确认是不是网络层面的问题。# 抓取到目标服务的SYN包 tcpdump -i eth0 -nn dst host 192.168.1.100 and dst port 8080 and tcp[tcpflags] tcp-syn ! 0如果看到大量SYN但没有SYNACK说明对端服务没起来防火墙拦截了网络不通# 同时看SYN和SYNACK tcpdump -i eth0 -nn host 192.168.1.100 and port 8080 and (tcp[tcpflags] tcp-syn ! 0)4.2 排查连接被重置如果连接频繁被RST抓包分析原因。# 抓取RST包 tcpdump -i eth0 -nn tcp[tcpflags] tcp-rst ! 0常见原因端口没监听连接数超限防火墙策略应用主动关闭4.3 分析HTTP请求# 抓取HTTP请求行 tcpdump -i eth0 -A -s0 tcp port 80 and (((ip[2:2] - ((ip[0]0xf)2)) - ((tcp[12]0xf0)2)) ! 0) # 简单版本 tcpdump -i eth0 -A port 80 | grep -E GET|POST|HTTP4.4 抓取DNS查询# 抓取所有DNS流量 tcpdump -i eth0 -nn port 53 # 只看DNS查询内容 tcpdump -i eth0 -nn -v port 53输出示例14:22:31.123 IP 192.168.1.10.54321 8.8.8.8.53: 12345 A? www.example.com. (33) 14:22:31.145 IP 8.8.8.8.53 192.168.1.10.54321: 12345 1/0/0 A 93.184.216.34 (49)4.5 分析数据库连接# MySQL连接问题排查 tcpdump -i eth0 -nn port 3306 # 看MySQL协议内容 tcpdump -i eth0 -X port 3306 | grep -A5 Error # Redis连接 tcpdump -i eth0 -nn port 6379 -A4.6 排查网络丢包抓取重传包# 抓取TCP重传通过序列号判断 # 方法保存抓包文件用tshark分析 tcpdump -i eth0 -nn -w /tmp/capture.pcap tshark -r /tmp/capture.pcap -Y tcp.analysis.retransmission或者简单判断# 看有没有大量重复的seq tcpdump -i eth0 -nn tcp | awk {print $1,$2,$3,$4,$5} | sort | uniq -c | sort -rn | head5. 高级技巧5.1 抓包文件轮转长时间抓包防止文件过大# 每100MB切一个文件最多保留10个 tcpdump -i eth0 -w /tmp/capture.pcap -C 100 -W 10 # 每小时切一个文件 tcpdump -i eth0 -w /tmp/capture_%Y%m%d_%H%M%S.pcap -G 36005.2 远程抓包本地分析服务器上抓包传到本地用Wireshark分析# 方法1抓完传输 tcpdump -i eth0 -w /tmp/capture.pcap scp server:/tmp/capture.pcap . # 方法2实时传输需要网络稳定 ssh userserver tcpdump -i eth0 -w - port 80 | wireshark -k -i - # 方法3通过管道 ssh userserver tcpdump -i eth0 -nn -U -w - port 80 capture.pcap5.3 多节点同时抓包排查分布式系统问题经常需要在多台机器同时抓包。手动方式# 在多台机器上同时执行用时间戳对齐 tcpdump -i eth0 -nn -tt -w /tmp/capture_$(hostname).pcap port 8080批量方式用Ansible# capture.yml - hosts: all tasks: - name: 开始抓包 shell: | nohup tcpdump -i eth0 -nn -w /tmp/capture_{{ inventory_hostname }}.pcap \ port 8080 async: 60 poll: 0如果机器在不同网络环境逐个SSH登录很麻烦。我一般会用组网工具WireGuard、ZeroTier、星空组网这类先把机器串到一个虚拟网络然后Ansible批量执行。5.4 抓取指定进程的流量tcpdump本身不支持按进程过滤但可以曲线救国# 1. 找到进程监听的端口 ss -tlnp | grep nginx # 2. 按端口抓包 tcpdump -i eth0 port 80 or port 443 # 或者用strace跟踪进程的网络调用 strace -f -e tracenetwork -p $(pgrep nginx)5.5 抓取特定内容的包# 抓取包含error的HTTP响应 tcpdump -i eth0 -A port 80 | grep -i error # 抓取包含特定字符串的包 tcpdump -i eth0 -s0 -A | grep -B5 -A5 password # 使用ngrep更专业的内容过滤 ngrep -d eth0 GET port 806. 常用抓包命令速查# 抓取到某服务的所有连接 tcpdump -i eth0 -nn host 192.168.1.100 and port 8080 # 抓取新建连接 tcpdump -i eth0 -nn tcp[tcpflags] tcp-syn ! 0 and tcp[tcpflags] tcp-ack 0 # 抓取连接关闭 tcpdump -i eth0 -nn tcp[tcpflags] (tcp-fin|tcp-rst) ! 0 # 抓取大于1000字节的包 tcpdump -i eth0 -nn greater 1000 # 抓取HTTPS握手Client Hello tcpdump -i eth0 -nn tcp port 443 and (tcp[((tcp[12] 0xf0) 2)] 0x16) # 抓取ICMP错误包 tcpdump -i eth0 -nn icmp[icmptype] ! icmp-echo and icmp[icmptype] ! icmp-echoreply # 排除干扰流量 tcpdump -i eth0 -nn not port 22 and not arp and not port 537. 性能注意事项7.1 避免影响生产# 限制抓包速率 tcpdump -i eth0 -c 10000 # 只抓10000个包 # 只抓包头不抓内容 tcpdump -i eth0 -s 96 # 默认值够分析协议了 # 用BPF过滤减少内核到用户态的数据量 tcpdump -i eth0 port 80 # 比抓全部再grep好7.2 高流量场景# 增加buffer防止丢包 tcpdump -i eth0 -B 4096 -w capture.pcap # 用pfring等高性能抓包工具 # 或者直接用tc做流量镜像到分析机总结场景命令基础抓包tcpdump -i eth0 -nn抓特定主机tcpdump -i eth0 host 192.168.1.100抓特定端口tcpdump -i eth0 port 80抓TCP连接建立tcpdump tcp[tcpflags] tcp-syn ! 0抓RST包tcpdump tcp[tcpflags] tcp-rst ! 0保存到文件tcpdump -w capture.pcap看HTTP内容tcpdump -A port 80抓DNStcpdump -nn port 53排查思路先明确要抓什么流量构造过滤表达式抓包同时复现问题用Wireshark或tshark分析抓包文件对比正常和异常时的包找出差异tcpdump配合Wireshark基本能搞定大部分网络问题排查。
面试前必刷!Java高级工程师1210道面试题(附答案)分享 Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。… 2026/7/14 5:27:38
精通flowchart.js:从概念到实践的流程图可视化全指南 精通flowchart.js:从概念到实践的流程图可视化全指南 【免费下载链接】flowchart.js Draws simple SVG flow chart diagrams from textual representation of the diagram 项目地址: https://gitcode.com/gh_mirrors/fl/flowchart.js 一、核心价值解析&#… 2026/7/14 13:43:11
KMS_VL_ALL_AIO开源工具深度解析:一键激活Windows与Office的智能解决方案 KMS_VL_ALL_AIO开源工具深度解析:一键激活Windows与Office的智能解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 当系统提示"激活你的Windows"或Office功能受限&a… 2026/7/11 18:40:59
告别论文难题!2026年热门AI论文网站推荐,轻松搞定初稿 期刊论文AI写作效率低?四款工具降重大纲生成指南 你是否还在为了撰写期刊论文而感到苦恼?面对数量庞大的文献资料、繁琐的格式要求和一遍又一遍的修订,使得很多学术人员效率极低。别焦虑,今天我为你推荐四款经过实测的AI论文写作… 2026/7/15 10:44:11
Grok-1.5大模型部署指南:数学推理与代码生成实战 这次我们来看一个备受关注的大语言模型项目——Grok。作为xAI公司推出的开源模型,Grok在短短几个月内经历了从初版到1.5版本的快速迭代,特别是在长文本处理、数学推理和代码生成能力上展现出显著进步。对于需要处理复杂任务的技术团队来说,了… 2026/7/15 10:40:09
S-Cart多语言电商解决方案:如何支持国际化业务 S-Cart多语言电商解决方案:如何支持国际化业务 【免费下载链接】s-cart Free Laravel e-commerce for business: shopping cart, cms content, and more... 项目地址: https://gitcode.com/gh_mirrors/sc/s-cart 在全球化电商浪潮中,多语言支持已… 2026/7/15 10:38:07
AI编程助手霹雳椒娃:从代码生成到架构设计的实战指南 最近在AI圈子里,一个名为"霹雳椒娃"的AI助手突然火了起来。这个名字听起来像是某个动漫角色的AI特工,但实际上它代表着一类新型的编程助手工具。如果你还在为代码调试、文档编写、技术方案设计而头疼,这类工具可能正是你需要的&quo… 2026/7/15 10:36:05
5分钟快速上手:Llama 2模型推理终极指南 5分钟快速上手:Llama 2模型推理终极指南 【免费下载链接】llama Inference code for Llama models 项目地址: https://gitcode.com/GitHub_Trending/lla/llama 引言与概览 你是否对Meta开源的Llama 2大型语言模型充满好奇,却不知从何开始&#x… 2026/7/15 10:36:05
3步快速上手Source SDK 2013:新手完整配置指南 3步快速上手Source SDK 2013:新手完整配置指南 【免费下载链接】source-sdk-2013 The 2013 edition of the Source SDK 项目地址: https://gitcode.com/GitHub_Trending/so/source-sdk-2013 作为Valve公司推出的经典游戏开发工具包,Source SDK 20… 2026/7/15 10:36:05
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41