tcpdump 命令备忘录
介绍
Tcpdump 打印出网络接口上数据包内容的描述。
使用
1 | tcpdump [options] [proto] [dir] [type] |
简单使用
1 | root@webb:~# tcpdump |
解析信息。
时:分:秒.毫秒 | 网络协议 | 发送方的IP地址.端口/主机名.协议(如果这里的端口能够对应上协议的端口就显示协议)> 接收方IP地址.端口/主机名.协议 | 协议的信息 | |
---|---|---|---|---|
15:01:20.621140 | IP | 192.168.111.1.43116 > webb.ssh | Flags [P.], seq 1:37, ack 364648, win 998, options [nop,nop,TS val 544451144 ecr 3742755450], length 36 |
过滤使用
过滤特定IP地址数据包
1 | root@webb:~# tcpdump host 192.168.1.1 |
过滤发送方IP地址数据包
1 | root@webb:~# tcpdump src 192.168.1.1 |
过滤接收方IP地址数据包
1 | root@webb:~# tcpdump dst 192.168.1.1 |
过滤某个网段数据包
1 | root@webb:~# tcpdump net 192.168.1.0/24 |
过滤某个端口或某个范围端口数据包
1 | root@webb:~# tcpdump port 80 / tcpdump port http / tcpdump portrange 8080-8888 |
过滤某个协议数据包
不能过滤应用层协议。
1 | root@webb:~# tcpdump icmp |
常见参数
-i 监听网卡
用法 | 说明 |
---|---|
-i ens32 | 监听某块网卡 |
-i any | 监听所有网卡 |
1 | root@webb:~# tcpdump -i ens32 |
-w 将捕获的数据包保存到文件
1 | root@webb:~# tcpdump -w filename.pcap |
-r 从文件中读取数据包
1 | root@webb:~# tcpdump -r filename.pcap |
-n 不把IP地址转化为主机名,直接显示IP地址。
1 | root@webb:~# tcpdump -n |
-nn 不把IP地址转化为主机名和不把端口号转换成协议,直接显示IP地址和端口号。
1 | root@webb:~# tcpdump -nn |
-N 只显示host或域名开头部分(192.ssh=192.168.1.1.ssh)。
1 | root@webb:~# tcpdump -N |
-t 每行不输出时间
1 | root@webb:~# tcpdump -t |
-tt 每行输出时间戳
1 | root@webb:~# tcpdump -tt |
-ttt 每两行输出时间戳
1 | root@webb:~# tcpdump -ttt |
-tttt 输出日期时间
1 | root@webb:~# tcpdump -tttt |
-v 输出详细的信息(TTL,ID标识…)
1 | root@webb:~# tcpdump -v |
-vv 显示比-v更多的信息(NFS回应包中的附加域,SMB数据包会完全解码)
1 | root@webb:~# tcpdump -vv |
-vvv 显示比-vv更多的信息(telnet使用的SB,SE选项会被打印)
1 | root@webb:~# tcpdump -vvv |
-c 限制数据包次数
1 | root@webb:~# tcpdump -c 20 |
-C 限制数据包文件大小
需要配合-w使用。如果数据包超过限制的大小就会生成一个新的文件用来保存数据包。
1 | root@webb:~# tcpdump -C 1 -w abc |
-W 限制写入文件次数
如果限定的文件都写满了以后会从第一个文件开始写。
1 | root@webb:~/test# tcpdump -C 1 -W 3 -w test |
-Q 选择输入或输出方向的数据
参数:in out inout。
- 输入(下载)
1 | root@webb:~# tcpdump -Q in |
- 输出(上传)
1 | root@webb:~# tcpdump -Q out |
-q 显示简洁的信息
1 | root@webb:~# tcpdump -q |
-D 显示可以用的网卡
1 | root@webb:~# tcpdump -D |
-L 显示某个网卡已只数据链路信息
1 | root@webb:~# tcpdump -L |
-S 指定每个数据包的长度
如果超过设定的大小限制,数据包会被截断,而每行会出现[|协议]这种标识。
1 | root@webb:~# tcpdump -s 50 |
-A 数据包的信息用ASCII字符串显示
1 | root@webb:~# tcpdump -A |
-X 数据包的信息用十六进制和ASCII字符串显示
1 | root@webb:~# tcpdump -X |
-e 显示数据链路层的头部信息(MAC地址、VLAN tag信息)
1 | root@webb:~# tcpdump -e |
-F 使用文件中的过滤规则
1 | root@webb:~# cat filter_rule |
-l 对标准输出进行行缓冲(标准输出遇到一个换行符就马上把这行的内容打印出来)。
1 | root@webb:~# tcpdump -l | tee data |
逻辑运算符
and/&& 满足所有条件
1 | root@webb:~# tcpdump src 192.168.1.1 and port 80 |
or/|| 只满足一个条件
1 | root@webb:~# tcpdump tcp port 53 or udp port 53 |
not/! 取反
1 | root@webb:~# tcpdump not tcp port 22 |
多个逻辑运算符组合
1 | root@webb:~# tcpdump "src 192.168.1.1 and (tcp port 80 or icmp)" |
高级过滤
less 抓取数据包小于xx bytes的数据包
1 | root@webb:~# tcpdump less 100 -c 3 |
greater 抓取数据包大于xx bytes的数据包
1 | root@webb:~# tcpdump greater 1000 -c 3 |