咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
在网络运维和系统管理中,网络问题排查是最常见的任务之一。tcpdump作为命令行网络抓包分析工具,功能强大、灵活,是网络工程师和系统管理员必备的故障排查利器。它可以捕获网络接口上的数据包,并提供详细的协议分析。本文将深入讲解 tcpdump的高级用法,从基础抓包到复杂的过滤分析,助你精准定位网络问题。
# 安装
sudo apt install tcpdump # Debian/Ubuntu
sudo yum install tcpdump # RHEL/CentOS
# 查看版本和编译选项
tcpdump --version
# 列出所有可用接口
tcpdump -D
# 或使用 ip 命令
ip link show
常见接口命名:
· eth0、ens33:物理以太网接口
· wlan0:无线接口
· lo:本地回环接口
· docker0、br-xxx:Docker 网桥
· tun0、tap0:VPN 隧道接口
· any:捕获所有接口的数据包
# 捕获所有经过 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
典型输出示例:
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的核心功能,可精确捕获感兴趣的数据包。
# 捕获与指定主机相关的所有流量
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
# 捕获特定端口的流量
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
# 捕获特定协议
sudo tcpdump icmp
sudo tcpdump arp
sudo tcpdump udp
sudo tcpdump tcp
sudo tcpdump icmp6
# 逻辑运算符: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
# 捕获 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
# 捕获 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)'
# 捕获所有 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线路检测中心期待与你一起探索。