`

网络数据采集分析工具TcpDump的简介以及用法

 
阅读更多

一、TcpDump的安装

       分为两种安装方式:

       1.  rpm包的形式来安装

              获取root权限,安装,命令:rpm -ivh tcpdump-3.rpm

       2.  源代码形式的安装

             (1)获取源代码

                  源代码打包方式有两种:tar压缩包(tcpdump-3_4a5.tar.Z)和rpm分发包(tcpdump-3_4a5.src.rpm)。

                  解压缩源代码,tar格式解压命令:tar -xvfz tcpdump-3_4a5.tar.Z ;rpm格式解压命令:rpm -ivh tcpdump-3_4a5.src.rpm

             (2)编译源代码前的准备工作

                  编译之前,确认libpcap库文件已经安装,并且准备好标准c编译器(gcc等)。

                  在源代码目录中,有个Makefile.in文件。可以根据当前系统的配置情况来修改(vi Makefile.in )该文件中BINDEST和MANDEST两个宏定义,它们的缺省值为:BINDEST=@sbindir@,MANDEST=@mandir@ 。BINDEST表示安装tcpdump的二进制文件的路径名,MANDEST表示tcpdump的man帮助页的路径名。

             (3)编译源代码

                  ./configure :执行源代码目录下的configure脚本,它从系统中读取安装所需的必要属性

                  make :根据makefile.in文件中的规则来编译源代码

                  make install :安装编译好的二进制文件

二、TcpDump的使用

        1.  普通情况下,直接启动tcpdump将监视第一个网络界面所流过的数据包,信息如下:

            # tcpdump
       tcpdump: listening on fxp0
       11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
       11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
                            0000 0000 0080 0000 1007 cf08 0900 0000
                            0e80 0000 902b 4695 0980 8701 0014 0002
                            000f 0000 902b 4695 0008 00
       11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
                            ffff 0060 0004 ffff ffff ffff ffff ffff
                            0452 ffff ffff 0000 e85b 6d85 4008 0002
                            0640 4d41 5354 4552 5f57 4542 0000 0000
                            0000 00

    从上面的输出可以看出,tcpdump对截获的数据的内容没有进行详细解码,数据包里面大部分的数据还是用16进制的形式直接输出,因此,一般做法是使用-w参数将抓取到的包保存到文件中,再使用其他工具进行解码分析(如tcpshow)

        2.  在抓取网络数据包的时候,可以在tcpdump后面加上各种参数,来对所有的数据包进行过滤,获取到自己所需要的数据包。

              tcpdump的命令格式:

                      tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

            2.1选项介绍

                  -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(简单网络管理协议)

         2.2表达式介绍

               在表达式中一般有如下关键字和逻辑运算

              (1)关于类型的关键字,主要包括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.

             (2)确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。

                  例如src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

             (3)协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。

                   Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的 地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则 tcpdump将会监听所有协议的信息包。

             (4)其他重要的关键字如下:gateway, broadcast,less,greater

             (5)三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││'

 

           举例:

                    A  想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

                                 #tcpdump host 210.27.48.1
                    B  想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信:(在命令行中使用括号时,一定要加上‘\’)

                                 #tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)
                   C  如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包:

                                #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
                   D  如果想要获取主机210.27.48.1接收或发出的telnet包:
                               #tcpdump tcp port 23 host 210.27.48.1 

                  E  系统将只对名为hostname的主机上eth0网卡的通信数据包进行监视(主机名可以是本地主机,也可以是网络上的任何一台计算机):
                      #tcpdump -i eth0 src host hostname

         2.3输出信息说明

               下面是集中典型的输出信息

                A   数据链路层头信息

                    使用命令 #tcpdump --e host ice
                    其中, ice 是一台装有linux的主机,它的MAC地址是0:90:27:58:AF:1A,
                    H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;

                   上一条命令的输出结果如下所示:
                      21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telnet 0:0(0) ack 22535 win 8760 (DF)

                  分析:21:50:12是显示的时间, 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.      

              B  ARP包的TcpDump输出信息

                   使用命令#tcpdump arp

                   得到的输出结果是:
                      22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。             

              C  TCP包的输出信息

                    使用命令#tcpdump tcp

                   用TcpDump捕获的TCP包的一般输出信息:
                       src > dst: flags data-seqno ack window urgent options
                    src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

             D  UDP包的输出信息

                 用TcpDump捕获的UDP包的一般输出信息是:

                      route.port1 > ice.port2: udp lenth
                 UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics