- 官网地址:tcpdump
- 切记:用root身份使用此工具
默认情况下,抓取eth0
端口
19:10:54.150404 IP 192.168.1.103.52482 > 115.239.211.92.http: Flags [.], ack 1, win 229, length 0
不加任何选项的时候,其输出信息的各个字段的含义是:
- 时间戳
- ID号
- 网络层协议类型(
IP
、IP6
) - 数据发送方主机名(IP.端口)
-
- 数据接收方主机名(IP.端口)
- 运输层协议概要
TCP报文首部有6位的flag字段,表示6种不同的标识:
- U:
URGgent
带外(紧急)数据,应进行传送,最高优先级 - A:
ACKnowlegment
确认标识 - P:
PuSH
推送,无需等待缓冲区填满,就理解发送 - R:
ReSeT
该标识为1的时候,表明TCP出现严重差错,必须释放连接 - S:
SYNchronization
同步序列号 - F:
FINis
正常释放一个连接 - .:未设置任何标识
seq 352:704
表示发送的其实序列号为352,发送的最后一个序列号为703(704-1),704是接下来ack返回的值。这个数据包的长度是352(352~703)
seq 352
这样的数据报表示发送的起始序列号为352,但实际发送的长度为0
确认号。表示希望收到的下一个数组包的起始序号
接收窗口
选项
数据包的长度
选项 | 描述 |
---|---|
-a | 将IP地址和广播地址转变成名字 |
-A | 以ASCII形式显示数据包内容 |
-c | 在收到指定数量的数据包后,tcpdump就会停止 |
-d | 将匹配信息包的代码以人们能够理解的汇编格式给出 |
-dd | 将匹配信息包的代码以c语言程序段的格式给出 |
-ddd | 将匹配信息包的代码以十进制的形式给出 |
-D | 显示网卡设备 |
-e | 打印数据链路层 的头部信息 |
-F | 从指定文件读取表达式,忽略其他表达式 |
-i | 抓取特定网卡的流量,如-i eth0 |
-n | 用IP地址表示主机,用数字表示端口号 |
-r | 读取由-w 选项抓取的包文件 |
-t | 不显示时间戳 |
-tt | 输出非格式化的时间戳,如1430312629.265789 |
-ttt | 输出本行和前面一行之间的时间 |
-v | 显示详细信息 |
-v | 显示比-v 更详细的信息 |
-w | 将数据包写入文件-w cap.log |
-X | 用十六进制和ASCII码输出数据报详细信息 |
待整理
用IP地址表示主机,而不是主机名;用数字表示端口号,而不是服务名称
192.168.1.103.52482 > 115.239.211.92.http
192.168.1.103.52482 > 115.239.211.92.80 //-n 选项
Linux中凡是涉及IP地址的工具,只要加上
-n
选项就不进行反解,比如netstat
反解:指根据IP地址去查询主机名/域名
tcpdump的表达式支持正则,此外它还具有几种关键字
- host:主机名(或IP地址)
- net :CIDR方法表示的网络地址。如
tcpdump net 1.2.3.0/24
- gateway:指定网关
- port:端口号
- portfange:端口范围。如
tcpdump portrange 1-1024
指定要抓取数据报的协议类型:tcp、udp、icmp、arp、rarp、fddi
- src:指定数据包的发送端
- dst:指定数据报的目的端
- greater:
tcpdump greater 1000
只抓取大于1000字节的流量 - less:
tcpdump less 10
- and(
&&
) - or(
||
) - not(
!
)
tcpdump src 192. or src 192
tcpdump not port 80
如果表达式比较复杂的时候,可以用括号()
括起来,但是需要/
转义。或者用单引号' '
来扩住,就可以不用转义
tcpdump 'dst 10.0.2.4 and (src 192.1.1.103)'
tcpdump还允许直接使用数据包中的指定字节的内容来过滤数据包。
tcpdump 'tcp[13] &2 !=0'
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
tcpdump 'gateway snup and ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'