tcpdump抓包实战:命令行网络诊断利器

前言

Wireshark虽然好用,但服务器上通常没有图形界面。tcpdump是Linux下最常用的命令行抓包工具,排查网络问题、分析协议、定位连接异常都离不开它。

本文整理tcpdump的常用技巧,从基础语法到实际问题排查,配合真实场景案例。


1. 基础用法

1.1 最简单的抓包

# 抓取eth0网卡的所有流量tcpdump-ieth0# 抓取所有网卡tcpdump-iany# 指定抓取数量tcpdump-ieth0-c100

1.2 常用参数

# -n:不解析主机名(速度快)# -nn:不解析主机名和端口名tcpdump-ieth0-nn# -v/-vv/-vvv:详细程度递增tcpdump-ieth0-vv# -X:同时以十六进制和ASCII显示包内容tcpdump-ieth0-X# -A:以ASCII显示包内容(适合HTTP)tcpdump-ieth0-A# -s0:抓取完整数据包(默认只抓前96字节)tcpdump-ieth0-s0# -w:保存到文件(可用Wireshark打开)tcpdump-ieth0-wcapture.pcap# -r:读取抓包文件tcpdump-rcapture.pcap

1.3 组合使用

# 常用组合:不解析、完整包、保存文件tcpdump-ieth0-nn-s0-w/tmp/capture.pcap# 边抓边看,同时保存tcpdump-ieth0-nn-U-w/tmp/capture.pcap&tail-f/tmp/capture.pcap|tcpdump-r-

2. 过滤表达式

tcpdump强大之处在于过滤表达式,精准抓取需要的流量。

2.1 按主机过滤

# 抓取与192.168.1.100通信的所有流量tcpdump-ieth0host192.168.1.100# 抓取源地址为192.168.1.100tcpdump-ieth0 srchost192.168.1.100# 抓取目标地址为192.168.1.100tcpdump-ieth0 dsthost192.168.1.100# 抓取与多个主机通信tcpdump-ieth0host192.168.1.100 orhost192.168.1.101# 排除某个主机tcpdump-ieth0 nothost192.168.1.100

2.2 按端口过滤

# 抓取80端口流量tcpdump-ieth0 port80# 抓取源端口为80tcpdump-ieth0 src port80# 抓取目标端口为80tcpdump-ieth0 dst port80# 抓取端口范围tcpdump-ieth0 portrange8000-9000# 抓取多个端口tcpdump-ieth0 port80or port443or port8080

2.3 按协议过滤

# 只抓TCPtcpdump-ieth0 tcp# 只抓UDPtcpdump-ieth0 udp# 只抓ICMP(ping)tcpdump-ieth0 icmp# 只抓ARPtcpdump-ieth0 arp

2.4 按网段过滤

# 抓取192.168.1.0/24网段tcpdump-ieth0 net192.168.1.0/24# 抓取源网段tcpdump-ieth0 src net10.0.0.0/8

2.5 按TCP标志位过滤

# 抓取SYN包(新连接)tcpdump-ieth0'tcp[tcpflags] & tcp-syn != 0'# 抓取SYN+ACK包tcpdump-ieth0'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'# 抓取FIN包(连接关闭)tcpdump-ieth0'tcp[tcpflags] & tcp-fin != 0'# 抓取RST包(连接重置)tcpdump-ieth0'tcp[tcpflags] & tcp-rst != 0'# 简写方式tcpdump-ieth0'tcp[13] & 2 != 0'# SYNtcpdump-ieth0'tcp[13] & 1 != 0'# FINtcpdump-ieth0'tcp[13] & 4 != 0'# RST

2.6 组合过滤

# 抓取到MySQL的流量tcpdump-ieth0 dst port3306and dsthost192.168.1.100# 抓取HTTP请求(排除SSH)tcpdump-ieth0 port80and not port22# 抓取指定IP的TCP SYN包tcpdump-ieth0'host 192.168.1.100 and tcp[tcpflags] & tcp-syn != 0'# 复杂组合:抓取从web服务器到数据库的非SSH流量tcpdump-ieth0'src host 192.168.1.10 and dst host 192.168.1.20 and not port 22'

3. 输出解读

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.SYN+ACK
F.FIN+ACK

3.3 三次握手示例

# 客户端发SYN14:22:31.001 IP10.0.0.1.45678>10.0.0.2.80: Flags[S],seq100# 服务端回SYN+ACK14:22:31.002 IP10.0.0.2.80>10.0.0.1.45678: Flags[S.],seq200, ack101# 客户端发ACK14:22:31.003 IP10.0.0.1.45678>10.0.0.2.80: Flags[.], ack201

4. 实战场景

4.1 排查连接超时

服务调用超时,先确认是不是网络层面的问题。

# 抓取到目标服务的SYN包tcpdump-ieth0-nn'dst host 192.168.1.100 and dst port 8080 and tcp[tcpflags] & tcp-syn != 0'

如果看到大量SYN但没有SYN+ACK,说明:

  1. 对端服务没起来
  2. 防火墙拦截了
  3. 网络不通
# 同时看SYN和SYN+ACKtcpdump-ieth0-nn'host 192.168.1.100 and port 8080 and (tcp[tcpflags] & tcp-syn != 0)'

4.2 排查连接被重置

如果连接频繁被RST,抓包分析原因。

# 抓取RST包tcpdump-ieth0-nn'tcp[tcpflags] & tcp-rst != 0'

常见原因:

  • 端口没监听
  • 连接数超限
  • 防火墙策略
  • 应用主动关闭

4.3 分析HTTP请求

# 抓取HTTP请求行tcpdump-ieth0-A-s0'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'# 简单版本tcpdump-ieth0-Aport80|grep-E'GET|POST|HTTP'

4.4 抓取DNS查询

# 抓取所有DNS流量tcpdump-ieth0-nnport53# 只看DNS查询内容tcpdump-ieth0-nn-vport53

输出示例:

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-ieth0-nnport3306# 看MySQL协议内容tcpdump-ieth0-Xport3306|grep-A5'Error'# Redis连接tcpdump-ieth0-nnport6379-A

4.6 排查网络丢包

抓取重传包:

# 抓取TCP重传(通过序列号判断)# 方法:保存抓包文件,用tshark分析tcpdump-ieth0-nn-w/tmp/capture.pcap tshark-r/tmp/capture.pcap-Y"tcp.analysis.retransmission"

或者简单判断:

# 看有没有大量重复的seqtcpdump-ieth0-nn'tcp'|awk'{print $1,$2,$3,$4,$5}'|sort|uniq-c|sort-rn|head

5. 高级技巧

5.1 抓包文件轮转

长时间抓包,防止文件过大:

# 每100MB切一个文件,最多保留10个tcpdump-ieth0-w/tmp/capture.pcap-C100-W10# 每小时切一个文件tcpdump-ieth0-w/tmp/capture_%Y%m%d_%H%M%S.pcap-G3600

5.2 远程抓包本地分析

服务器上抓包,传到本地用Wireshark分析:

# 方法1:抓完传输tcpdump-ieth0-w/tmp/capture.pcapscpserver:/tmp/capture.pcap.# 方法2:实时传输(需要网络稳定)sshuser@server'tcpdump -i eth0 -w - port 80'|wireshark-k-i-# 方法3:通过管道sshuser@server'tcpdump -i eth0 -nn -U -w - port 80'>capture.pcap

5.3 多节点同时抓包

排查分布式系统问题,经常需要在多台机器同时抓包。

手动方式

# 在多台机器上同时执行,用时间戳对齐tcpdump-ieth0-nn-tt-w/tmp/capture_$(hostname).pcap'port 8080'

批量方式(用Ansible):

# capture.yml-hosts:alltasks:-name:开始抓包shell:|nohup tcpdump -i eth0 -nn -w /tmp/capture_{{ inventory_hostname }}.pcap \ 'port 8080' &async:60poll:0

如果机器在不同网络环境,逐个SSH登录很麻烦。我一般会用组网工具(WireGuard、ZeroTier、星空组网这类)先把机器串到一个虚拟网络,然后Ansible批量执行。

5.4 抓取指定进程的流量

tcpdump本身不支持按进程过滤,但可以曲线救国:

# 1. 找到进程监听的端口ss-tlnp|grepnginx# 2. 按端口抓包tcpdump-ieth0 port80or port443# 或者用strace跟踪进程的网络调用strace-f-etrace=network-p$(pgrep nginx)

5.5 抓取特定内容的包

# 抓取包含"error"的HTTP响应tcpdump-ieth0-Aport80|grep-ierror# 抓取包含特定字符串的包tcpdump-ieth0-s0-A|grep-B5-A5'password'# 使用ngrep(更专业的内容过滤)ngrep-deth0'GET'port80

6. 常用抓包命令速查

# 抓取到某服务的所有连接tcpdump-ieth0-nnhost192.168.1.100 and port8080# 抓取新建连接tcpdump-ieth0-nn'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'# 抓取连接关闭tcpdump-ieth0-nn'tcp[tcpflags] & (tcp-fin|tcp-rst) != 0'# 抓取大于1000字节的包tcpdump-ieth0-nn'greater 1000'# 抓取HTTPS握手(Client Hello)tcpdump-ieth0-nn'tcp port 443 and (tcp[((tcp[12] & 0xf0) >> 2)] = 0x16)'# 抓取ICMP错误包tcpdump-ieth0-nn'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'# 排除干扰流量tcpdump-ieth0-nn'not port 22 and not arp and not port 53'

7. 性能注意事项

7.1 避免影响生产

# 限制抓包速率tcpdump-ieth0-c10000# 只抓10000个包# 只抓包头,不抓内容tcpdump-ieth0-s96# 默认值,够分析协议了# 用BPF过滤减少内核到用户态的数据量tcpdump-ieth0'port 80'# 比抓全部再grep好

7.2 高流量场景

# 增加buffer防止丢包tcpdump-ieth0-B4096-wcapture.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

排查思路

  1. 先明确要抓什么流量,构造过滤表达式
  2. 抓包同时复现问题
  3. 用Wireshark或tshark分析抓包文件
  4. 对比正常和异常时的包,找出差异

tcpdump配合Wireshark,基本能搞定大部分网络问题排查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇搞定MySQL:从环境搭建到深入理解,高效入门数据库

MySQL相关知识点可以通过点击以下链接进行学习一起加油&#xff01; 文章目录 MySQL与MariaDB&#xff1a;同源而生的数据库系统一、MySQL的安装与初步配置 1. 更新系统软件包列表2. 安装MySQL服务器3. 检查MySQL服务状态4. 首次登入MySQL5. 为root用户配置密码 步骤一&#xf…

在线作图工具测评盘点:4款主流工具深度横评

随着数字化办公场景的深化&#xff0c;在线作图工具已成为技术团队、运营人员、创业者的必备生产力工具。相较于传统桌面设计软件&#xff0c;在线工具无需本地部署、支持跨设备协作、轻量化操作的优势愈发凸显。本次测评聚焦市场主流在线作图工具&#xff0c;以“专业实用性、…

网络延迟与丢包问题排查实战

前言 服务响应慢、接口超时、用户反馈卡顿&#xff0c;很多时候问题出在网络层面。延迟高、丢包、抖动这些问题看起来简单&#xff0c;排查起来却需要一套系统的方法。 本文整理网络延迟和丢包问题的排查思路和常用工具&#xff0c;配合实际案例。1. 基础检测工具 1.1 ping&…

深度解构:从chroot到容器——Mock构建环境的隔离技术演进与问题诊断

深度解构&#xff1a;从chroot到容器——Mock构建环境的隔离技术演进与问题诊断 引言&#xff1a;RPM构建的隔离需求 在Linux发行版开发中&#xff0c;RPM包的构建需要一个干净、可控的环境以确保构建的可重复性和可靠性。Mock作为Fedora社区开发的RPM构建工具&#xff0c;正…

欧盟EN 18031-1无线设备认证

对于计划进军欧盟市场的无线设备制造商来说&#xff0c;EN 18031-1已成为绕不开的合规门槛。自2025年8月1日正式强制执行以来&#xff0c;不少企业因对标准细节理解偏差&#xff0c;遭遇了产品扣留、测试反复等问题&#xff1a;有的误将旧版EN 303645证书当作豁免依据&#xff…

EN 18031-1通用网络安全认证新规

2025年8月1日&#xff0c;欧盟正式关闭了无线电设备通往其市场的一道关键“安全闸门”——《无线电设备指令》&#xff08;RED&#xff09;下的网络安全要求正式强制执行&#xff0c;而EN 18031-1正是这把闸门的核心钥匙。如果您正在为出口欧盟的无线设备&#xff08;从智能音箱…

MT-Safety 标签env 和 locale

一、先给一句话总览 env 和 locale 并不是“函数线程安全不安全”, 而是说: 这些函数依赖一个“全局可变对象”, 只要这个对象在多线程运行期间不被修改,它们就是安全的。 二、背景:glibc 的 MT-Safety 注解体系 glibc 文档把函数分成几类: MT-Safe:多线程下可并发调用…

除了安全更新,EN 18031-1还有哪些重要的认证要求?

除安全更新外&#xff0c;EN 18031-1 作为欧盟 RED 指令下的核心网络安全标准&#xff0c;还明确了访问控制与身份验证、安全存储与通信、网络弹性、技术文档与合规声明四大核心要求&#xff0c;这些要求与安全更新共同构成设备进入欧盟市场的基础安全基线&#xff0c;具体内容…

写给开发者、内容创作者:当你“快做完了”却开始崩,这不是技术问题

你可能经历过这种时刻&#xff1a;功能都差不多了、测试也跑起来了、上线只差临门一脚——结果你突然开始焦虑、失眠、疯狂想重构、对细节极度挑剔&#xff0c;甚至找借口把发布往后拖。 《最小阻力之路》把这段状态称为“完成期”的典型难关&#xff1a;越接近成果&#xff0c…

如何确保设备满足EN 18031-1标准中的安全更新要求?

要确保设备满足 EN 18031-1 标准中的安全更新要求&#xff0c;需从技术设计、流程管控、测试验证三个维度构建闭环体系&#xff0c;覆盖更新包的全生命周期安全&#xff0c;具体可落地的步骤如下&#xff1a;明确安全更新的核心技术要求&#xff08;标准硬性条款&#xff09;EN…

通达信专抓超跌副图无未来

{}RSV:(CLOSE-LLV(LOW,20))/(HHV(HIGH,20)-LLV(LOW,20))*100; K:SMA(RSV,3,1),COLORWHITE; D:SMA(K,3,1),COLORYELLOW; 超跌极限买入:IF(CROSS(K,D) AND "CYS.CYS"<-10 AND REF("ASR.ASR",3)<10,50,0); 超跌反弹:IF(CROSS(K,D) AND K<20,80,20),C…

安达发|石油化工行业自动排产软件:驱动产业升级的核心引擎

在石油化工行业向绿色低碳转型的关键期&#xff0c;自动排产软件正以"数字大脑"的姿态重构传统生产模式。据中国石油和化学工业联合会数据显示&#xff0c;2025年我国石化行业规模以上企业产值将突破15万亿元&#xff0c;但行业平均设备利用率仅68%&#xff0c;库存周…

计算机毕设从选题到答辩,全程可指导(真实案例)

每年毕业季&#xff0c;都会有大量计算机专业学生在毕业设计阶段感到焦虑&#xff1a;选题不知道怎么选&#xff0c;系统做了一半卡壳&#xff0c;论文不会写&#xff0c;答辩又担心被问懵。实际上&#xff0c;计算机毕业设计并不是“不会做”&#xff0c;而是缺少清晰的流程规…

Python+Vue的NBA球星管理系统 Pycharm django flask

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 随着信息技…

通达信日周共振

{}{日周共振} DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); 周DIF:("MACD.DIF#WEEK"); 周DEA:("MACD.DEA#WEEK"); M1:(DIFDEA)/2; M2:(周DIF周DEA)/2; MA60:MA(CLOSE,60); 日趋势:(DIFDEA)/2; 周趋势:(周DIF周DEA)/2; XG:周DIF>0 AND 周DEA>0 …

AI 量化为什么不敢上线?——我的 Fail-Closed 模板实战

很多人私下问过我一个问题&#xff1a;“AI 都已经能写策略、跑回测、算因子了&#xff0c; 为什么真正能上线跑真金白银的系统&#xff0c;反而很少&#xff1f;”这个问题&#xff0c;其实不在模型能力上&#xff0c; 而在上线这一步&#xff0c;谁敢签字。一、AI 量化“不敢…

Python+Vue的大学生创新创业调查问卷系统 Pycharm django flask

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 随着科技的…

通达信回归斜率线

{}回归斜率线A:EMA(SLOPE(C,4)*20C,42); 经典RL:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; 经典K:SMA(经典RL,3,1); 经典D:SMA(经典K,3,1); 经典J:3*经典K-2*经典D; MAHL1:100*((EMA((HL)/2,3)-LLV(EMA((HL)/2,5),30)-(EMA(H,20)-EMA(L,20))) /(LLV(EMA((HL)/2,5),30…

红娘子双线强弱源码分享贴图

{} MID: (HIGHLOWCLOSE)/3;红先锋:SUM(MAX(0,HIGH-REF(MID,1)),a)/SUM(MAX(0,REF(MID,1)-LOW),a)*100,colorred;红娘子:REF(MA(CR,b),b/2.51),colorcyan;

【毕业设计】机器学习基于python的砖头墙裂缝识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…