Linux tcpdump命令详解
1. 语法
bash
tcpdump [-adeflnnNOpqStvxX] [-c <数据包数目>] [-dd] [-ddd] [-F <表达文件>] [-i <网络界面>] [-r <数据包文件>] [-s <数据包大小>] [-tt] [-T <数据包类型>] [-vv] [-w <数据包文件>] [输出数据单位]
2. 参数说明
-
-a 尝试将网络和广播地址转换成名称。
-
示例 :
bashtcpdump -a -i eth0
将捕获到的
eth0
接口的网络和广播地址转换为名称显示。
-
-
-c <数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-
示例 :
bashtcpdump -c 10 -i eth0
捕获10个
eth0
接口上的数据包后停止。
-
-
-d 把编译过的过滤包编译转换成可读的格式,并倾倒到标准输出。
-
示例 :
bashtcpdump -d -i eth0
显示编译过的过滤表达式。
-
-
-dd 把编译过的过滤包编译转换成C语言的格式,并倾倒到标准输出。
-
示例 :
bashtcpdump -dd -i eth0
以C语言格式显示编译过的过滤表达式。
-
-
-ddd 把编译过的过滤包编译转换成十进制数字的格式,并倾倒到标准输出。
-
示例 :
bashtcpdump -ddd -i eth0
以十进制格式显示编译过的过滤表达式。
-
-
-e 在每列倾倒的资料上显示连线层级的文件头。
-
示例 :
bashtcpdump -e -i eth0
显示
eth0
接口上的数据包的以太网头部信息。
-
-
-f 用数字显示网际网路地址。
-
示例 :
bashtcpdump -f -i eth0
用数字格式显示IP地址。
-
-
-F <表达文件> 指定内容表达方式的文件。
-
示例 :
bashtcpdump -F filter.txt -i eth0
使用
filter.txt
中的表达方式过滤eth0
接口上的数据包。
-
-
-i <网络界面> 使用指定的网络接口送出数据包。
-
示例 :
bashtcpdump -i eth0
捕获
eth0
接口上的数据包。
-
-
-l 使用标准输出的缓冲区。
-
示例 :
bashtcpdump -l -i eth0
将输出行缓冲。
-
-
-n 不把主机的网络地址转换成名称。
-
示例 :
bashtcpdump -n -i eth0
不转换主机名。
-
-
-N 不列出域名。
-
示例 :
bashtcpdump -N -i eth0
不解析主机名的域名部分。
-
-
-O 不将数据包编码器最佳化。
-
示例 :
bashtcpdump -O -i eth0
禁用优化。
-
-
-p 不让网络界面进入混杂模式。
-
示例 :
bashtcpdump -p -i eth0
使
eth0
接口不进入混杂模式。
-
-
-q 快速输出,仅列出少数的传输协议信息。
-
示例 :
bashtcpdump -q -i eth0
简单快速输出数据包的信息。
-
-
-r <数据包文件> 从指定的文件读取数据包数据。
-
示例 :
bashtcpdump -r file.pcap
从
file.pcap
文件读取数据包。
-
-
-s <数据包大小> 设置每个数据包的大小。
-
示例 :
bashtcpdump -s 1024 -i eth0
捕获
eth0
接口上前1024字节的数据包。
-
-
-S 用绝对而非相对数值列出TCP序列号。
-
示例 :
bashtcpdump -S -i eth0
以绝对序列号显示TCP序列号。
-
-
-t 在每列倾倒资料上不要显示时间戳记。
-
示例 :
bashtcpdump -t -i eth0
不显示时间戳。
-
-
-tt 在每列倾倒资料上显示未经过格式化的时间戳记。
-
示例 :
bashtcpdump -tt -i eth0
显示未经格式化的时间戳。
-
-
-T <数据包类型> 强制将表达方式所指的类型的数据信息转换成该数据包类型。
-
示例 :
bashtcpdump -T rpc -i eth0
将捕获的
eth0
接口上的数据包解释为RPC数据包。
-
-
-v 详细显示指令执行过程。
-
示例 :
bashtcpdump -v -i eth0
详细显示捕获数据包的信息。
-
-
-vv 更详细显示指令执行过程。
-
示例 :
bashtcpdump -vv -i eth0
更详细地显示数据包信息。
-
-
-x 用十六进制字码列出数据包资料。
-
示例 :
bashtcpdump -x -i eth0
以十六进制格式显示
eth0
接口上的数据包内容。
-
-
-X 用十六进制和ASCII码列出数据包资料。
-
示例 :
bashtcpdump -X -i eth0
以十六进制和ASCII码显示
eth0
接口上的数据包内容。
-
-
-w <数据包文件> 把数据包资料写入到指定的文件。
-
示例 :
bashtcpdump -w file.pcap -i eth0
将捕获的
eth0
接口上的数据包写入file.pcap
文件。
-
3. 使用tcpdump的详细抓包示例
捕获eth0
接口上TCP协议的HTTP请求,并保存到文件http_requests.pcap
中。
-
运行tcpdump命令
bashtcpdump -i eth0 'tcp port 80' -w http_requests.pcap
- 命令解释 :
-i eth0
:指定网络接口eth0
。'tcp port 80'
:过滤条件,捕获TCP协议的80端口数据包(HTTP请求)。-w http_requests.pcap
:将捕获的数据包保存到文件http_requests.pcap
中。
- 命令解释 :
-
查看保存的数据包
bashtcpdump -r http_requests.pcap
bashreading from file http_requests.pcap, link-type EN10MB (Ethernet) 10:00:00.000000 IP 192.168.1.2.54321 > 192.168.1.1.http: Flags [S], seq 0, win 65535, options [mss 1460,sackOK,TS val 123456 ecr 0,nop,wscale 7], length 0 10:00:01.000000 IP 192.168.1.1.http > 192.168.1.2.54321: Flags [S.], seq 0, ack 1, win 65535, options [mss 1460,sackOK,TS val 123457 ecr 123456,nop,wscale 7], length 0 10:00:02.000000 IP 192.168.1.2.54321 > 192.168.1.1.http: Flags [.], ack 1, win 65535, options [nop,nop,TS val 123458 ecr 123457], length 0