咨询热线:4006-75-4006

售前:9:00-23:30    备案:9:00-18:00    技术:7*24h

使用 tcpdump 深度分析与排查网络问题

2026-03-06 17:07:34 26次

使用 tcpdump 深度分析与排查网络问题

 

欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。

 

在网络运维和系统管理中,网络问题排查是最常见的任务之一。tcpdump作为命令行网络抓包分析工具,功能强大、灵活,是网络工程师和系统管理员必备的故障排查利器。它可以捕获网络接口上的数据包,并提供详细的协议分析。本文将深入讲解 tcpdump的高级用法,从基础抓包到复杂的过滤分析,助你精准定位网络问题。

一、tcpdump 基础:核心概念与安装

1. 安装与版本检查

# 安装

sudo apt install tcpdump      # Debian/Ubuntu

sudo yum install tcpdump      # RHEL/CentOS

 

# 查看版本和编译选项

tcpdump --version

2. 选择网络接口

# 列出所有可用接口

tcpdump -D

# 或使用 ip 命令

ip link show

常见接口命名:

· eth0ens33:物理以太网接口

· wlan0:无线接口

· lo:本地回环接口

· docker0br-xxxDocker 网桥

· tun0tap0VPN 隧道接口

· any:捕获所有接口的数据包

二、基础抓包与输出解读

1. 基本抓包语法

# 捕获所有经过 eth0 接口的数据包

sudo tcpdump -i eth0

 

# 限制捕获包数

sudo tcpdump -i eth0 -c 10

 

# 不解析主机名和端口名(提高性能)

sudo tcpdump -i eth0 -n

 

# 详细输出

sudo tcpdump -i eth0 -v

sudo tcpdump -i eth0 -vv

sudo tcpdump -i eth0 -vvv

 

# 输出到文件

sudo tcpdump -i eth0 -w capture.pcap

2. 解读输出格式

典型输出示例:

14:20:30.123456 IP 192.168.1.100.54321 > 8.8.8.8.53: 12345+ A? www.landui.com (45)

· 14:20:30.123456:时间戳

· IP:协议类型

· 192.168.1.100.54321:源 IP 和端口

· 8.8.8.8.53:目标 IP 和端口

· 12345+ A? www.landui.com (45)DNS 查询(查询 ID 12345,A 记录,查询域名,报文长度 45 字节)

三、高级过滤表达式

过滤表达式是 tcpdump的核心功能,可精确捕获感兴趣的数据包。

1. 主机过滤

# 捕获与指定主机相关的所有流量

sudo tcpdump host 192.168.1.100

 

# 捕获源或目标为指定主机的流量

sudo tcpdump src host 192.168.1.100

sudo tcpdump dst host 192.168.1.100

 

# 排除特定主机

sudo tcpdump not host 192.168.1.100

sudo tcpdump host 192.168.1.0/24 and not host 192.168.1.100

2. 端口过滤

# 捕获特定端口的流量

sudo tcpdump port 80

sudo tcpdump port 443

sudo tcpdump portrange 1-1024

 

# 源端口或目标端口

sudo tcpdump src port 53

sudo tcpdump dst port 22

 

# 捕获 SSH 流量(端口 22)

sudo tcpdump tcp port 22

3. 协议过滤

# 捕获特定协议

sudo tcpdump icmp

sudo tcpdump arp

sudo tcpdump udp

sudo tcpdump tcp

sudo tcpdump icmp6

4. 复杂逻辑组合

# 逻辑运算符:and (&&), or (||), not (!)

# 捕获发往 8.8.8.8 的 DNS 查询

sudo tcpdump dst host 8.8.8.8 and udp port 53

 

# 捕获非 SSH 流量

sudo tcpdump not tcp port 22

 

# 捕获来自 192.168.1.100 的 HTTP 流量

sudo tcpdump src host 192.168.1.100 and tcp port 80

 

# 捕获 HTTP 或 HTTPS 流量

sudo tcpdump tcp port 80 or tcp port 443

四、深入协议分析

1. TCP 连接分析

# 捕获 TCP 握手(SYN)和挥手(FIN)

sudo tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

 

# 捕获 SYN 包

sudo tcpdump 'tcp[tcpflags] & tcp-syn != 0'

 

# 捕获 RST 包(连接重置)

sudo tcpdump 'tcp[tcpflags] & tcp-rst != 0'

 

# 查看完整的 TCP 连接过程

sudo tcpdump -nnS tcp

2. HTTP 流量分析

# 捕获 HTTP GET 请求

sudo tcpdump -s 0 -A -vv 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

 

# 更简单的方法:捕获包含特定关键字的流量

sudo tcpdump -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'  # GET

sudo tcpdump -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'  # POST

 

# 捕获 HTTP 请求头

sudo tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

3. DNS 查询分析

# 捕获所有 DNS 查询

sudo tcpdump -i any udp port 53

 

# 捕获特定域名的查询

sudo tcpdump -i any udp port 53 and host 8.8.8.8

 

# 只显示 DNS 查询(不包括响应)

sudo tcpdump -i any 'udp port 53 and udp[10] & 0x80 = 0'

 

# 只显示 DNS 响应

sudo tcpdump -i any 'udp port 53 and udp[10] & 0x80 = 0x80'

 

8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。

 


首页
最新活动
个人中心
XML 地图