tcpdump是Linux系统中功能强大的网络抓包分析工具,能够捕获网络接口上的数据包并以可读形式显示。下面详细介绍tcpdump的使用方法。
在大多数Linux发行版中,tcpdump已经预装。如果没有,可以使用以下命令安装:
# Debian/Ubuntu
sudo apt-get install tcpdump
# RHEL/CentOS
sudo yum install tcpdump
# Arch Linux
sudo pacman -S tcpdump
tcpdump [选项] [过滤表达式]
| 选项 | 说明 |
|---|---|
-i |
指定网络接口,如-i eth0 |
-n |
不将地址解析为主机名 |
-nn |
不解析主机名和端口名 |
-v |
显示详细信息 |
-vv |
显示更详细信息 |
-vvv |
显示最详细信息 |
-c |
捕获指定数量的包后退出 |
-w |
将捕获的数据包写入文件 |
-r |
从文件中读取数据包 |
-s |
设置抓包长度(默认96字节) |
-A |
以ASCII格式显示数据包内容 |
-X |
以十六进制和ASCII格式显示数据包内容 |
-e |
显示数据链路层头部信息 |
sudo tcpdump
sudo tcpdump -i eth0
# 捕获来自或去往192.168.1.1的流量
sudo tcpdump host 192.168.1.1
# 捕获80端口的流量
sudo tcpdump port 80
# 捕获源端口或目标端口为80的流量
sudo tcpdump src port 80 or dst port 80
# 捕获TCP流量
sudo tcpdump tcp
# 捕获UDP流量
sudo tcpdump udp
# 捕获ICMP流量
sudo tcpdump icmp
# 捕获来自192.168.1.1且目标端口为80的TCP流量
sudo tcpdump 'tcp and src host 192.168.1.1 and dst port 80'
# 捕获并保存到文件
sudo tcpdump -w capture.pcap
# 从文件中读取并分析
sudo tcpdump -r capture.pcap
# 捕获HTTP GET请求
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
# 捕获HTTP POST请求
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
# 捕获DNS查询
sudo tcpdump -i eth0 udp port 53
tcpdump的典型输出格式如下:
timestamp src.ip.src.port > dst.ip.dst.port: flags [tcp flags], seq sequence, ack ack, win window, options [options], length length
例如:
10:12:36.123456 192.168.1.100.51234 > 8.8.8.8.53: UDP, length 32
限制抓包大小:使用-s选项可以限制每个包捕获的大小
sudo tcpdump -s 1500
排除特定流量:使用not排除不需要的流量
sudo tcpdump not port 22
显示数据包内容:使用-X显示十六进制和ASCII内容
sudo tcpdump -X port 80
实时统计:使用-Z选项可以显示捕获统计信息
sudo tcpdump -Z
捕获特定数量的包:使用-c选项
sudo tcpdump -c 100
-w选项将结果保存到文件掌握tcpdump命令可以大大提升网络故障排查和协议分析的效率,是Linux系统管理员和网络工程师必备的技能之一。