tcpdump一些常用的选项。
-s number:tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,就需要使用这个选项,其中number是需要截取的报文字节数,如果是0的话,表示截取报文全部内容;
-nn:表示不解析域名,直接显示IP,在netstat命令中,也有这个选项;
-X:同时使用hex和ascii显示报文内容;
-S:显示绝对的序列号(sequence number),而不是相对编号;
-i:指定监听的网卡,如果为-i any则表示监听所有的网卡;
-v,-vv,-vvv:显示更多的详细信息;
-c number:表示截取number个报文,然后结束;
-w:将监听到的数据包写入文件中保存,而并不分析和打印出来;
-A:只使用ascii打印报文的全部数据,不要和-X选项一起使用。截取HTTP请求的时候可以用sudo tcpdump -nSA port 80
过滤器
先进行使用实例详解时,有必要先掌握tcpdump一些基本的使用理论知识,先来说说过滤器。
在服务器上的网络报文是异常的多,很多时候我们只关注和具体问题有关的数据报文,而这些有用的报文只占到很小的一部分,学习一下tcpdump提供的灵活而且功能强大的过滤器。
过滤器也可以简单地分为三类:type,dir和proto。
type:主要用来区分过滤报文源类型,主要由host主机报文,net网段报文和port指定端口的报文组成;
dir:只过滤报文的源地址和目的地址,主要包括src源地址和dst目的地址;
proto:只过滤报文的协议类型,支持tcp,udp和icmp等;使用的时候可以省略
proto关键字:
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
在我们使用tcpdump命令时是离不开这些过滤器的。
条件组合
在茫茫网络中,想要找到那个你想要的网络包,还是有一定难度的。为了抓住那个我们想要的网络包,在我们抓包命令中,包含越多的限制条件,抓的无关包就会越少,所以在进行抓包时,我们可以使用“与”(and、&&)、“或”(or、||)和“非”(not、!)来将多个条件组合起来。这对我们需要基于某些条件来分析网络包是非常有用的。
使用实例
- 命令:tcpdump -i eth1
说明:监视指定网络接口的数据包
- 命令:tcpdump host 210.27.48.3
说明:截获210.27.48.3主机收到的和发出的所有数据包
- 命令:tcpdump host 210.27.48.4 and (210.27.48.5 or 210.27.48.6)
说明:截获210.27.48.3主机和210.27.48.5或者210.27.48.6主机进行通信的所
有数据包
- 命令:tcpdump net 192.168.1.0/24
说明:截获192.168.1.0/24整个网络的数据包
- 命令:tcpdump -i eth0 src host 210.27.48.3
说明:监视eth0网卡上源地址是210.27.48.3的所有网络包
- 命令:tcpdump -i eth0 dst host 210.27.48.3
说明:监视eth0网卡上目的地址是210.27.48.3的所有网络包
- 命令:tcpdump tcp port 23 and host 210.27.48.3
说明:获取主机210.27.48.3上端口为23的应用发出和接收的所有TCP协议包
- 命令:tcpdump udp port 123
说明:获取本机123端口发出和接收的所有UDP协议包
- 命令:tcpdump src host 10.126.1.222 and dst net 10.126.1.0/24
说明:截获源主地址为10.126.1.222,目的地址是10.126.1.0/24整个网络
- 命令:tcpdump -i eth0 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap
说明:抓取报文后按照指定时间间隔保存;-G选项后面接时间,单位为秒;上述命令就是每隔60秒生存一个文件
- 命令:tcpdump -i eth0 -s0 -C 1 -Z root -w eth0Packet.pcap
说明:抓取报文后按照指定报文大小保存;-C选项后接文件大小,单位为MB;上述命令就是每抓包文件达到1MB时就使用一个新的文件保存新抓的报文