tcpdump 抓包
tcpdump 抓包
tcpdump 命令是一个基于命令行的网络抓包工具,可以在 Linux 和其他 Unix-like 操作系统上使用。该工具可以通过捕获和解析网络数据包来帮助系统管理员和网络工程师进行网络故障排查、安全分析和网络监控等任务。以下是 tcpdump 命令的详细解释和使用示例:
tcpdump [options] [filter expression]
常用选项
-i: 指定抓包的网络接口。
-n: 禁用 DNS 反解析,以 IP 地址形式显示网络地址。
-c: 指定抓包的数量。
-s: 指定抓取数据包的长度。
-A: 以 ASCII 码的形式输出抓包的内容。
-X: 以十六进制和 ASCII 码的形式输出抓包的内容。
-w: 将抓包的结果保存到文件中。
-r: 从文件中读取抓包的结果。
- options: 可选参数,用于指定 tcpdump 命令的一些选项,例如 -i 选项用于指定抓包的网络接口,-n 选项用于禁用 DNS 反解析等。
- filter expression: 过滤表达式,用于指定需要捕获的数据包的匹配条件,例如 host 192.168.1.1 表示捕获源或目的 IP 地址为 192.168.1.1 的数据包。
使用例子
# 示例 1:捕获指定网络接口的所有数据包
sudo tcpdump -i eth0
# 示例 2:捕获指定源或目的 IP 地址的数据包
sudo tcpdump host 192.168.1.1
# 示例 3:捕获指定协议类型的数据包,例如 TCP 或 UDP
sudo tcpdump tcp
sudo tcpdump udp
# 示例 4:捕获指定端口号的数据包
sudo tcpdump port 80
# 示例 5:捕获指定网络地址和端口号的数据包
sudo tcpdump host 192.168.1.1 and port 80
# 示例 6:捕获指定协议类型和端口号的数据包
sudo tcpdump tcp port 80
# 示例 7:捕获指定源或目的 IP 地址和端口号的数据包
sudo tcpdump host 192.168.1.1 and port 80
# 示例 8:捕获指定协议类型、源或目的 IP 地址和端口号的数据包
sudo tcpdump tcp and host 192.168.1.1 and port 80
# 示例 9:捕获指定网络接口和协议类型的数据包
sudo tcpdump -i eth0 tcp
# 示例 10:捕获指定网络接口和端口号的数据包
sudo tcpdump -i eth0 port 80
# 示例 11:捕获指定网络接口、协议类型和端口号的数据包
sudo tcpdump -i eth0 tcp port 80
# 示例 12:输出 ASCII 码格式的数据包内容
sudo tcpdump -A
# 示例 13:输出十六进制和 ASCII 码格式的数据包内容
sudo tcpdump -X
# 示例 14:显示时间戳、源和目的 IP 地址、协议类型、数据包长度和 TTL 等信息
sudo tcpdump -tttt -n -e
# 示例 15:仅显示数据包的时间戳、源和目的 IP 地址和协议类型等信息
sudo tcpdump -tttt -n -q
# 示例 16:保存抓包结果到文件中
sudo tcpdump -i eth0 -w capture.pcap
# 示例 17:从文件中读取抓包结果
sudo tcpdump -r capture.pcap
# 示例 18:输出数据包的 ASCII 码格式并保存到文件中
sudo tcpdump -A -w capture.txt
# 示例 19:捕获指定网络接口和协议类型的数据包,并保存到文件中
sudo tcpdump -i eth0 tcp -w capture.pcap
# 示例 20:仅输出 TCP 数据包的源和目的 IP 地址和端口号
sudo tcpdump -n -q -s 0 -i eth0 tcp | awk '{print $3,$5}'
解释
- timestamp:时间戳,指示数据包的接收时间。
- src:源 IP 地址。
- dst:目的 IP 地址。
- proto:协议类型,例如 TCP 或 UDP。
- length:数据包长度。
- ttl:生存时间,用于防止数据包在网络中无限循环。
- port:源或目的端口号。
- flags:TCP 标志,例如 SYN、ACK 和 FIN 等。
- seq:TCP 数据包的序列号。
- ack:TCP 数据包的确认号。
- interface:捕获数据包的网络接口名称。
- version:IP 协议版本号,例如 IPv4 或 IPv6。
- tos:服务类型,用于指定数据包的优先级。
- id:IP 数据包标识号,用于唯一标识一个数据包。
- offset:IP 分片偏移量,用于指示当前分片相对于原始 IP 数据包的偏移量。
- flags:IP 分片标志,用于指示数据包是否分片以及分片的位置。
- proto:IP 数据包的协议类型,例如 TCP 或 UDP。
- checksum:IP 数据包的校验和,用于检测数据包是否损坏。
- tos:TCP/IP 数据包的服务类型,用于指定数据包的优先级。
- window:TCP 数据包的窗口大小,用于控制数据包的流量。
- urgent:TCP 数据包的紧急指针,用于指示数据包中包含的紧急数据的位置。
- options:TCP 数据包的选项信息,例如 MSS、SACK 和时间戳等。
- data:数据包中的数据,例如 HTTP 请求或响应的内容。
其他
捕获所有 TCP 数据包:tcpdump tcp
捕获所有 UDP 数据包:tcpdump udp
捕获所有 ICMP 数据包:tcpdump icmp
捕获指定 IP 地址的数据包:tcpdump host 192.168.0.1
捕获指定源 IP 地址的数据包:tcpdump src 192.168.0.1
捕获指定目标 IP 地址的数据包:tcpdump dst 192.168.0.1
捕获指定协议类型和端口号的数据包:tcpdump tcp port 80
捕获指定协议类型和源端口号的数据包:tcpdump tcp src port 80
捕获指定协议类型和目标端口号的数据包:tcpdump tcp dst port 80
捕获指定数据包大小范围内的数据包:tcpdump less 1000
捕获指定数据包大小范围外的数据包:tcpdump greater 1000
捕获指定协议类型和 IP 地址范围内的数据包:tcpdump net 192.168.0.0/24 tcp
捕获指定协议类型和 IP 地址范围外的数据包:tcpdump not net 192.168.0.0/24 tcp
以 ASCII 码形式打印捕获的数据包:tcpdump -A
以十六进制和 ASCII 码形式打印捕获的数据包:tcpdump -X
以指定的输出格式打印捕获的数据包:tcpdump -e -nn
指定捕获数据包的数量:tcpdump -c 10
从指定的网络接口捕获数据包:tcpdump -i eth0
将捕获的数据包写入文件:tcpdump -w capture.pcap
读取并解析指定文件中的数据包:tcpdump -r capture.pcap