跳转至

Tcpdump

例子:

下面的例子全是以抓取eth0接口为例,如果不加”-i eth0”是表示抓取所有的接口包括lo。

首先安装tcpdump包:yum install -y tcpdump

1、抓取包含172.16.1.122的数据包
tcpdump -i eth0 -vnn host 172.16.1.122

2、抓取包含172.16.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 172.16.1.0/24

3、抓取包含端口22的数据包
tcpdump -i eth0 -vnn port 22

4、抓取udp协议的数据包
tcpdump -i eth0 -vnn  udp

5、抓取icmp协议的数据包
tcpdump -i eth0 -vnn icmp

6、抓取arp协议的数据包
tcpdump -i eth0 -vnn arp

7、抓取ip协议的数据包
tcpdump -i eth0 -vnn ip

8、抓取源ip是172.16.1.122数据包。
tcpdump -i eth0 -vnn src host 172.16.1.122

9、抓取目的ip是172.16.1.122数据包
tcpdump -i eth0 -vnn dst host 172.16.1.122

10、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 22

11、抓取源ip是172.16.1.253且目的ip是22的数据包
tcpdump -i eth0 -vnn src host 172.16.1.253 and dst port 22

12、抓取源ip是172.16.1.122或者包含端口是22的数据包
tcpdump -i eth0 -vnn src host 172.16.1.122 or port 22

13、抓取源ip是172.16.1.122且端口不是22的数据包
tcpdump -i eth0 -vnn src host 172.16.1.122 and not port 22

14、抓取源ip是172.16.1.2且目的端口是22,或源ip是172.16.1.65且目的端口是80的数据包。
tcpdump -i eth0 -vnn \( src host 172.16.1.2 and dst port 22 \) or   \( src host 172.16.1.65 and dst port 80 \)

15、抓取源ip是172.16.1.59且目的端口是22,或源ip是172.16.1.68且目的端口是80的数据包。
tcpdump -i  eth0 -vnn 'src host 172.16.1.59 and dst port 22' or  ' src host 172.16.1.68 and dst port 80 '

16、把抓取的数据包记录存到/tmp/fill文件中,当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w  /tmp/fil1 -c 100

17、从/tmp/fill记录中读取tcp协议的数据包
tcpdump –i eth0 -vnn -r  /tmp/fil1 tcp

18、从/tmp/fill记录中读取包含172.16.1.58的数据包
tcpdump –i eth0 -vnn -r  /tmp/fil1 host  172.16.1.58


参数

-a    将网络地址和广播地址转变成名字;
-d    将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd    将匹配信息包的代码以C语言程序段的格式给出;
-ddd    将匹配信息包的代码以十进制的形式给出;
-e    在输出行打印出数据链路层的头部信息;
-f    将外部的Internet地址以数字的形式打印出来;
-l    使标准输出变为缓冲行形式;
-n    不把网络地址转换成名字;
-t    在输出的每一行不打印时间戳;
-v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv    输出详细的报文信息;
-c    在收到指定的包的数目后,tcpdump就会停止;
-F    从指定的文件中读取表达式,忽略其它的表达式;
-i    指定监听的网络接口;
-r    从指定的文件中读取包(这些包一般通过-w选项产生);
-w    直接将包写入文件中,并不分析和打印出来;
-T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

tcpdump 与wireshark

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。 还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析