tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04。
tcpdump的命令格式
tcpdump的参数众多,通过man tcpdump可以查看tcpdump的详细说明,这边只列一些笔者自己常用的参数:
tcpdump [-i 网卡] -nnAX '表达式'
各参数说明如下:
-i:interface 监听的网卡。
-nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。
-A:以ascii的方式显示数据包,抓取web数据时很有用。
-X:数据包将会以16进制和ascii的方式显示。
表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。
下面进行一些命令测试,如果没有权限,可以先切换成root用户。
监听网卡eth0
$ tcpdump -i eth0
这个方式最简单了,但是用处不多,因为基本上只能看到数据包的信息刷屏,压根看不清,可以使用ctrl+c中断退出,如果真有需求,可以将输出内容重定向到一个文件,这样也更方便查看。
监听指定协议的数据
$ tcpdump -i eth0 -nn 'icmp'
这个是用来监听icmp协议的数据,就是ping命令使用的协议。类似的,如果要监听tcp或者是udp协议,只需要修改上例的icmp就可以了。ping下监听的机器,输出如下:
tcpdump采用命令行方式,它的命令格式为:
tcpdump[ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]-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(简单网络管理协议;)示例:
1、如果要抓eth0的包,命令格式如下:
tcpdump -i eth0 -w /tmp/eth0.cap
2、如果要抓192.168.1.20的包,命令格式如下:
tcpdump -i etho host 192.168.1.20 -w /tmp/temp.cap
3、如果要抓192.168.1.20的ICMP包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and icmp -w /tmp/icmp.cap
4、如果要抓192.168.1.20的除端口10000,10001,10002以外的其它包,命令格式如下:
tcpdump -i etho host 192.168.1.20 and ! port 10000 and ! port 10001 and ! port 10002 -w /tmp/port.cap
5、假如要抓vlan 1的包,命令格式如下:
tcpdump -i eth0 port 80 and vlan 1 -w /tmp/vlan.cap
6、假如要抓pppoe的密码,命令格式如下:
tcpdump -i eht0 pppoes -w /tmp/pppoe.cap
7、假如要抓eth0的包,抓到10000个包后退出,命令格式如下:
tcpdump -i eth0 -c 10000 -w /tmp/temp.cap
8、在后台抓eth0在80端口的包,命令格式如下:
nohup tcpdump -i eth0 port 80 -w /tmp/temp.cap &