天天看点

tcpdump 抓包写文件tcpdump使用笔记

tcpdump使用笔记

1 tcpdump的参数和解释

[[email protected] 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 过滤主机

  1. 过滤所有经过

    ens32

    上目的或者源地址为

    192.168.1.1

    上的数据

    tcpdump -i ens32 host 192.168.1.1

  2. 过滤所有经过ens32上源地址为192.168.1.1的数据,只有源地址为192.168.1.1的单向数据

    tcpdump -i ens32 src host 192.168.1.1

  3. 过滤所有经过ens32上目的地址为192.168.1.1的数据,只有目的地址为192.168.1.1的单向数据

    tcpdump -i ens32 dst host 192.168.1.1

  4. 抓取与主机192.168.1.1通信的,且不包含192.168.1.2的数据包(.2和.1也通信)

    tcpdump -i ens32 ip host 192.168.1.1 and !192.168.1.1

  5. 抓取主机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 过滤端口

  1. 抓源端口或者目的端口为8080的所有数据包

    tcpdump -i ens32 port 8080

  2. 抓源端口为22的数据包

    tcpdump -i ens32 src port 22

  3. 抓目的端口为443的数据包

    tcpdump -i ens32 dst port 443

2.4 网络过滤

  1. 过滤arp包

    tcpdump -i ens32 arp

  2. 过滤 ip包

    tcpdump -i ens32 ip

  3. 过滤tcp包

    tcpdump -i ens32 tcp

  4. 过滤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 直接文件存储

  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

  2. 抓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

  3. 抓vlan 1的包

    tcpdump -i eth0 port 80 and vlan 1 -w /tmp/xxx.cap

  4. 抓pppoe的密码

    tcpdump -i eth0 pppoes -w /tmp/xxx.cap

3.2 文件循环存储

当只需要存储特定个数的文件或者循环写存储文件时,就要新增加参数来控制文件的存储,tcpdump提供3个参数来控制:

  1. -W

    : 最多写入多少个抓包文件,编号从00到19,19号写满后,从00号文件重新开始循环写
  2. -C

    :每个文件的大小上限,以M为单位;-C 20 -W 50 就是说,最多写入50个pcap文件,每个文件大小最大20M(总共最多占磁盘1G),编号从00到19,循环写入
  3. -s

    : 指定每个包抓多大,默认是68字节,我们可以自己指定它的大小,如果觉得68字节不足以分析的话

    间隔30s写一个文件

3.2.1 示例

  1. 抓包时50M写一个文件,第一个为

    eth0.pcap

    ,后面追加的包以数字后缀结尾保存文件

    tcpdump -i lo -C 50m -Z root -w eth0.pcap

  2. 间隔30s写一个抓包文件,以时间戳命名

    tcpdump -i lo -G 30 -w %Y_%m%d_%H%M_%S.pcap

  3. 循环抓包,

    -C

    每个包最大10M,

    -W

    最多有10个文件,

    tcpdump -i lo -C 10 -W 10 -Z root -w 00.pcap

[1] tcpdump高级过滤

[2] linux下tcpdump的使用