tcpdump使用笔记
1 tcpdump的参数和解释
[root@localhost opt]# tcpdump -help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
参数的解释:
-a:尝试将网络和广播地址转换成名称;
-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-e:在每列倾倒资料上显示连接层级的文件头;
-f:用数字显示网际网络地址;
-F<表达文件>:指定内含表达方式的文件;
-i<网络界面>:使用指定的网络截面送出数据包;
-l:使用标准输出列的缓冲区;
-n:不把主机的网络地址转换成名字;
-N:不列出域名;
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q :快速输出,仅列出少数的传输协议信息;
-r<数据包文件>:从指定的文件读取数据包数据;
-s<数据包大小>:设置每个数据包的大小;
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间戳记;
-tt: 在每列倾倒资料上显示未经格式化的时间戳记;
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v:详细显示指令执行过程;
-vv:更详细显示指令执行过程;
-x:用十六进制字码列出数据包资料;
-w<数据包文件>:把数据包数据写入指定的文件。
2 过滤的类型
2.1 监控接口
默认执行tcpdump
时监听的是第一个网卡上的数据,若想监听指定的网卡上的数据,需要指定网卡名字,用-i 网卡名
指定:
# 监控网卡名为ens32上的数据
tcpdump -i ens32
# 监控回环网卡上的数据,在linux下无需增加新的路由,直接监听网卡即可
tcpdump -i lo
2.2 过滤主机
-
过滤所有经过
ens32
上目的或者源地址为192.168.1.1
上的数据
tcpdump -i ens32 host 192.168.1.1
-
过滤所有经过ens32上源地址为192.168.1.1的数据,只有源地址为192.168.1.1的单向数据
tcpdump -i ens32 src host 192.168.1.1
-
过滤所有经过ens32上目的地址为192.168.1.1的数据,只有目的地址为192.168.1.1的单向数据
tcpdump -i ens32 dst host 192.168.1.1
-
抓取与主机192.168.1.1通信的,且不包含192.168.1.2的数据包(.2和.1也通信)
tcpdump -i ens32 ip host 192.168.1.1 and !192.168.1.1
-
抓取主机192.168.1.1和主机192.168.1.2或者192.168.1.3通信的数据包
tcpdump -i ens32 host 192.168.1.1 and \(192.168.1.2 or 192.168.1.3 \)
2.3 过滤端口
- 抓源端口或者目的端口为8080的所有数据包
tcpdump -i ens32 port 8080
- 抓源端口为22的数据包
tcpdump -i ens32 src port 22
- 抓目的端口为443的数据包
tcpdump -i ens32 dst port 443
2.4 网络过滤
- 过滤arp包
tcpdump -i ens32 arp
- 过滤 ip包
tcpdump -i ens32 ip
- 过滤tcp包
tcpdump -i ens32 tcp
- 过滤udp包
tcpdump -i ens32 udp
2.5 协议过滤
tcpdump -i ens32 net 192.168
tcpdump -i ens32 src net 192.168
tcpdump -i ens32 dst net 192.168
3 常见得到操作示例
在linux上一般是使用tcpdump抓包,详细的查看包建议使用wireshark,工具是生产力。因此一般情况都要将抓取的数据写到磁盘上,以下的例子都是将数据写到磁盘上,使用-w 文件名.pcap
来存储抓取的文件。
3.1 直接文件存储
- 抓192.168.1.1上8080端口的tcp包,将抓取的文件存储到/home/tcp.pcap文件中
tcpdump -i ens32 tcp and host 192.168.1.1 and port 8080 -w /home/tcp.pcap
- 抓119.29.121.116的80端口和110和25以外的其他端口的包
tcpdump -i eth0 host 119.29.121.116 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
- 抓vlan 1的包
tcpdump -i eth0 port 80 and vlan 1 -w /tmp/xxx.cap
- 抓pppoe的密码
tcpdump -i eth0 pppoes -w /tmp/xxx.cap
3.2 文件循环存储
当只需要存储特定个数的文件或者循环写存储文件时,就要新增加参数来控制文件的存储,tcpdump提供3个参数来控制:
-W
: 最多写入多少个抓包文件,编号从00到19,19号写满后,从00号文件重新开始循环写-C
:每个文件的大小上限,以M为单位;-C 20 -W 50 就是说,最多写入50个pcap文件,每个文件大小最大20M(总共最多占磁盘1G),编号从00到19,循环写入-s
: 指定每个包抓多大,默认是68字节,我们可以自己指定它的大小,如果觉得68字节不足以分析的话
间隔30s写一个文件
3.2.1 示例
- 抓包时50M写一个文件,第一个为
eth0.pcap
,后面追加的包以数字后缀结尾保存文件
tcpdump -i lo -C 50m -Z root -w eth0.pcap
- 间隔30s写一个抓包文件,以时间戳命名
tcpdump -i lo -G 30 -w %Y_%m%d_%H%M_%S.pcap
- 循环抓包,
-C
每个包最大10M,-W
最多有10个文件,
tcpdump -i lo -C 10 -W 10 -Z root -w 00.pcap
[1] tcpdump高级过滤
[2] linux下tcpdump的使用