tcpdump
是 Linux 下强大的网络抓包工具,广泛用于网络诊断和分析。以下是对 tcpdump
的详细讲解,包括安装、使用方法和常见示例。
1. 基本概念
tcpdump
用于捕获和分析网络数据包,可以过滤并显示传输中的数据,支持协议、端口等多种筛选条件。
2. 安装
大多数 Linux 发行版都自带 tcpdump
,如未安装可以用以下命令:
bash
# Ubuntu/Debian
sudo apt update && sudo apt install tcpdump
# CentOS/RHEL
sudo yum install tcpdump
3. 基本使用
1) 显示网络接口
bash
tcpdump -D
输出示例:
bash
1.eth0
2.wlan0
3.any
4.lo
数字表示接口编号,可用于指定抓包的接口。
2) 抓取指定接口的数据包
bash
tcpdump -i eth0
-i
指定接口名称。- 若不指定接口,默认抓取第一个非
lo
的接口。
4. 常用选项
1) 保存数据到文件
bash
tcpdump -i eth0 -w packets.pcap
-w
指定保存的文件(.pcap
格式,可用 Wireshark 分析)。
2) 读取已保存的文件
bash
tcpdump -r packets.pcap
-r
从文件中读取数据。
3) 限制数据包大小
bash
tcpdump -s 96
-s
指定捕获每个包的字节大小,96
表示捕获前 96 字节。
4) 限制捕获数量
cpp
tcpdump -c 10
-c
捕获 10 个数据包后停止。
5) 显示更详细的信息
bash
tcpdump -v # 显示详细信息
tcpdump -vv # 显示更详细信息
tcpdump -vvv # 显示极详细信息
5. 数据包过滤
tcpdump
支持 BPF 过滤表达式,常用的有协议、IP、端口等。
1) 按协议
-
抓取 TCP 数据包:
bashtcpdump tcp
-
抓取 UDP 数据包:
bashtcpdump udp
-
抓取 ICMP(ping)数据包:
bashtcpdump icmp
2) 按 IP 地址
-
抓取发往特定 IP 的数据包:
bashtcpdump host 192.168.1.1
-
抓取源 IP 为指定地址的数据包:
bashtcpdump src 192.168.1.1
-
抓取目标 IP 为指定地址的数据包:
bashtcpdump dst 192.168.1.1
3) 按端口
-
抓取访问特定端口的数据包:
bashtcpdump port 80
-
抓取源端口为 80 的数据包:
bashtcpdump src port 80
-
抓取目标端口为 443 的数据包:
bashtcpdump dst port 443
4) 组合条件
-
抓取源 IP 为 192.168.1.1 且目标端口为 22 的数据包:
bashtcpdump src 192.168.1.1 and dst port 22
-
抓取 IP 不为 192.168.1.1 的数据包:
bashtcpdump not host 192.168.1.1
6. 显示格式
1) 显示十六进制和 ASCII 格式
bash
tcpdump -X
-X
同时显示十六进制和 ASCII 数据。
2) 仅显示十六进制
bash
tcpdump -xx
3) 显示时间戳
bash
tcpdump -tttt
- 显示可读的时间格式。
7. 示例
1) 捕获 HTTP 流量
bash
tcpdump -i eth0 tcp port 80
2) 抓取特定网段的数据
bash
tcpdump net 192.168.1.0/24
3) 抓取包含特定内容的数据包
bash
tcpdump -A -i eth0 | grep "GET"
-A
显示数据包的 ASCII 内容。
8. 注意事项
- 权限 :
tcpdump
通常需要 root 权限运行。 - 性能影响:抓包可能影响系统性能,尤其在高流量网络中。
- 隐私与安全:抓取流量时避免泄露敏感信息。