tcpdump---dump the traffic on a network
说明:tcpdump根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句。普通用户不能正常执行,需具备root权限的用户才可以直接执行它。
格式:tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]
表达式说明:表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。表达式中常见的关键字有以下几种:
类型关键字:主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23指明端口号是23。如果没有指定类型,缺省的类型是host
传输方向关键字:主要包括src , dst ,dst or src, dst and src,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字
协议关键字:主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
其他关键字:gateway, broadcast,less, greater
逻辑运算符:非运算 'not ' '! ' ;与运算 'and' '&&' ;或运算 'or' '││'
options:
-i 指定监听的网络接口;如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0
-c 在收到指定数目的包后,tcpdump就会停止;-c 100 : 只抓取100个数据包
-w 直接将包写入文件中,并不分析和打印出来;-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析,wireshark的使用参考Wireshark抓包工具基础教程
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-F 从指定的文件中读取表达式,忽略其它的表达式;
-t 在输出的每一行不打印时间戳;
-n 不把网络地址转换成名字;
-nn 直接以 IP 及 Port Number 显示,而非主机名与服务名称;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-s 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
输出结果介绍:
1) 数据链路层头信息
ICE主机的MAC地址是0:90:27:58:AF:1A ,H219主机的MAC地址是8:0:20:79:5B:46。
[root@justin ~]# tcpdump -e host ICE tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:21:55.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t 0:0(0) ack 22535 win 8760 (DF) ...... 2 packets captured 1984 packets received by filter 1933 packets dropped by kernel [root@justin ~]#
13:21:55是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0接收该分组, eth0 >表示从网络接口设备发送分组, 8:0:20:79:5b:46是主机H219的MAC地址, 它表明是从源地址H219发来的分组. 0:90:27:58:af:1a是主机ICE的MAC地址, 表示该分组的目的地址是ICE。 ip 是表明该分组是IP分组,60 是分组的长度, h219.33357 > ICE. telnet 表明该分组是从主机H219的33357端口发往主机ICE的 TELNET(23)端口。 ack 22535 表明对序列号是222535的包进行响应。 win 8760表明发送窗口的大小是8760。
2) ARP包的tcpdump输出信息
[root@justin ~]# tcpdump arp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 14:18:21.802509 eth0 > arp who-has route tell ICE (0:90:27:58:af:1a) 14:18:21.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) ...... 7 packets captured 35 packets received by filter 0 packets dropped by kernel [root@justin ~]#
14:18:21是时间戳, 802509是ID号, eth0 >表明从主机发出该分组,arp表明是ARP请求包, who-has route tell ICE表明是主机ICE请求主机route的MAC地址。 0:90:27:58:af:1a是主机 ICE的MAC地址。
实例:
1)截获主机10.15.72.73 和主机10.15.72.74或10.15.72.75的通信(在命令行中使用括号时,一定要添加'\')
[root@justin ~]# tcpdump host 10.15.72.73 and \(10.15.72.74 or 10.15.72.75 \)
2)获取主机210.15.72.73除了和主机10.15.72.74之外所有主机通信的ip包
[root@justin ~]# tcpdump host 10.15.72.73 and not 10.15.72.74 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 15:01:17.895735 IP 10.15.72.73.58375 > 210.51.22.240.viziblebrowser: Flags [P.], seq 246661844:246662084, ack 3304727012, win 16425, length 240 .... 4 packets captured 2275 packets received by filter 2240 packets dropped by kernel [root@justin ~]# tcpdump host 10.15.72.73 and ! 10.15.72.74
3)对本机的udp 123 端口进行监视 123 为ntp的服务端口
[root@justin ~]# tcpdump udp port 123
4)对名为10.15.72.74的主机的通信数据包进行监视
[root@justin ~]# tcpdump -i eth0 src host 10.15.72.74 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 15:22:40.359246 IP 10.15.72.74.15718 > 255.255.255.255.vce: UDP, length 83 ...... 4 packets captured 6 packets received by filter 0 packets dropped by kernel [root@justin ~]#
5)监视所有送到主机10.15.72.74的数据包
[root@justin ~]# tcpdump -i eth0 dst host 10.15.72.74
6)过滤源主机10.15.72.74和目的端口不是telnet的报头,并导入到/home/tcpdump文件中:
[root@justin ~]# touch /home/ tcpdump [root@justin ~]# tcpdump src host 10.15.72.74 and dst port ! telnet -l > /home/tcpdump
7)监听来自eth0适配卡且通信协议为port 22,目标来源为10.15.72.74的数据包资料
[root@justin ~]# tcpdump -i eth0 -nn port 22 and src host 10.15.72.74
8)抓取访问eth0适配卡且访问端口为tcp 9080
[root@justin ~]# tcpdump -i eth0 dst 10.15.72.74 and tcp port 9080
用tcpdump嗅探80端口的访问看看谁最高
[root@justin ~]# tcpdump -tnn dst port 80 -c 10 | grep -i "^ip"|awk '{print $2}'|cut -d '.' -f 1-4|sort|uniq -c|tail -10