tcpdump抓包

tcpdump简单来说就是输出网络上的数据报文。可以根据使用者的选择来对网络上的数据报文进行截获并进行分析。

可以根据网络协议、物理接口、ip地址和端口号等各种条件进行过滤,还可以对抓获报文大小进行控制,等等。

1. 抓取报文

最简单的开始捕获报文的方法是直接使用tcpdump并指定捕获的网卡名称即可。

tcpdump -i eth0

可以使用ctrl+c来结束捕获程序。tcpdump的可视化输出功能有限。通常是捕获报文并保存下来,然后使用图形用户界面软件wireshark来分析。

可以使用-w选项来指定文件名即可将报文保存下来。

tcpdump -i eth0 -s 1500 -w aaa.cap

tcpdump有很多参数来控制在哪里捕获,如何捕获,以及捕获文件如何保存处理等选项,

-i interface 指定监听的网卡

-s  指定每个报文中截取的数据长度,不是缺省的68字节。如果仅仅对报头感兴趣,可以不使用该选项,指定为0说明不限制报文长度,而是捕获整个报文。一般以太网的MTU值为1500,因此指定长度为1500即可。

-U:确保输出是无缓冲的。

-w filename  报文保存到文件

-c 当收到指定报文个数后退出

-e 打印链接头,如MAC地址(print the link-level header on each dump line. This can be used, to print MAC layer addresses for protocols)。

-n 不要将IP地址和端口号进行转换,转换需要CPU时间

-G <rotate_seconds> 每隔指定的时间,将捕获的报文循环保存为新文件。需要-w配合使用,并指定时间格式才能循环保存文件,否则覆盖原来文件。常用事件格式%d(每月中的第几天),%H(当前的小时时间),%M(当前的分钟时间),%S(当前的秒时间)。

-D 输出tcpdump可以捕获的接口列表,包含接口编号和接口名称

-v 当解析或打印时输出详细的信息。例如报文的生存时间TTL、ID等IP报文选项。

-r 读取有-w创建的报文

-t 不打印时间戳

tcpdump -i eth0 -s 1500 -G 60 -W 1 -w  wang%H%M%s.pcap

tcpdump -i eth0 -n -v -c 500

2. 匹配规则

只有符合表达式要求的报文才会被抓取到。

表达式由一个或多个基本元素加上连接符组成,这些基本元素也称为原语,是指不可分割的最小单元。基本元素由一个ID和一个或多个修饰符组成,有3种不同类型的修饰符。

第一种是类型修饰符,共4个类型修饰符,分别为host、net、port和portrange。

host指定要捕获的主机或ip地址。

net需要捕获报文的子网。

port和portrange分别用于指定端口和端口范围。

第二种是传输方向的修饰符,包括src和dst。不仅可修饰地址,也可修饰端口。

tcpdump -i eth0 'dst port 80' -v
tcpdump -i eth0 'prot 5060 and src 192.168.1.100' -v

第三种是协议修饰符,可以基于特定的协议来进行过滤,可以是IP、ARP、RARP、ICMP、TCP和UDP等协议类型,如tcp port 21、udp port 5060等。

另外这些原语可以使用and(&&)、or(||)和not(!)来进行运算组合。所有的报文集合是全集,可以进行交、并和补集运算。在多个层次的集合运算时,可以使用小括号来分割其集合运算符的结合关系。

tcpdump -i eth0 -s0 -w wang.pcap host 10.0.0.15
tcpdump -i eth0 -w aaa.pcap port 59 or port 53 or port 80 or arp or icmp
(eth.addr==70:06:90:50:9e:06 || eth.addr==70:06:90:50:8f:be) && arp

 

摘自:智能路由器开发指南

posted @ 2017-06-04 13:59  yuxi_o  阅读(2925)  评论(0编辑  收藏  举报