Tcpdump命令的使用与示例
Tcpdump命令的使用与示例 inux下的网络分析网络数据采集分析工具 TcpDump 的简介顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析它支持针对网络层、协议、主机、网络或端口的过 滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公 开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具空pdumP存在于基本的FreeBSD系统中,由于它 需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息因此系统 中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁我们用尽量简单的话来定义tcpdump,就是:dump the traffice on a net work.,根据使用者的定义对网络上的数据包进行截获的 包分析工具作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员 分析网络,排查问题等所必备的东西之一如迪p提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者 都是非常有用的工具。
tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但 具备root权限的用户可以直接执行它来获取网络上的信息因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络 上的其他计算机的安全存在威胁网络数据采集分析工具 TcpDump 的安装在linux下tcpdump的安装十分简单,一般由两种安装方式一种是以rpm包的形式来进行安装另外一种是以源程序的形式安装rpm包的形式安装:这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装, 不需要修改任何东西以超级用户登录,使用命令如下:#rpm -ivh tcpdump—3 4a5.rpm这样tcpdump就顺利地安装到你的linux系统中怎么样,很简单吧源程序的安装:既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux —个最大的诱人之处就是在她上面 有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要所以我特别建议朋友们都采取这种源程序的安装方法•第一步 取得源程序 在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包,这种分发包有两种形式,一种是tar 压缩包(tcpdump-3 4a5. tar.Z),另一种是rpm的分发包(tcpdump-3 4a5.src.rpm)。
这两种形式的内容都是一样的,不同的仅 仅是压缩的方式.tar的压缩包可以使用如下命令解开:#tar xvfz tcpdump-3 4a5.tar.Zrpm的包可以使用如下命令安装:#rpm -ivh tcpdump-3 4a5.src.rpm这样就把tcpdump的源代码解压到/usr/src/redhat/SOURCES目录下.•第二步做好编译源程序前的准备活动在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpdump软件所需的库文件同样,你同时还 要有一个标准的c语言编译器在linux下标准的c语言编译器一般是gcc在tcpdump的源程序目录中有一个文件是 Makefile.in, configure命令就是从Makefile.in文件中自动产生Makefile文件在Makefile.in文件中,可以根据系统的 配置来修改 BINDEST 和 MANDEST 这两个宏定义,缺省值是BINDEST = @sbindir@MANDEST = @mandir@第一个宏值表明安装tcpdump的二进制文件的路径名,第二个表明tcpdump的man帮助页的路径名,你可以修改它们来满足系 统的需求。
• 第三步 编译源程序使用源程序目录中的configure脚本,它从系统中读出各种所需的属性并且根据Makefile.in文件自动生成Makefile文件, 以便编译使用.make命令则根据Makefile文件中的规则编译tcpdump的源程序使用make inst all命令安装编译好的tcpdump 的二进制文件总结一下就是:# tar xvfz t cpdump-3_4a5 .t ar.Z# vi Makefile.in# . /configure# make# make install3 网络数据采集分析工具 TcpDump 的使用普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包 tcpdumptcpdump: listening on fxp011:58:47.873028 bios-ns > bios-ns: udp 5011:58:47.9743310:10:7b:8:3a:56 >1:80:c2:0:0:0 802.1dui/Clen=4300000000008000001007cf08090000000e800000902b46950980870100140002000f0000902b469500080011:58:48.3731340:0:e8:5b:6d:85 >Broadcastsap e0ui/Clen=97ffff00600004ffffffffffffffffffff0452ffffffff0000e85b6d854008000206404d41535445525f57454200000000tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用 -C参数指定要监听的数据包数量,使用-W参数指定将监听到的数据包写入文件中保存,等等。
然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大, 反而不容易发现需要的数据包使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问 题辿dump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故 障的目的请使用man tcpdump查看这些过滤规则的具体用法显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的 bpfilter伪设备一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使 用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行在FreeBSD下,这就需要内核支持伪设备bpfilter因此,在内核中取消bpfilter 支持,就能屏蔽tcpdump之类的网络分析工具并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作攻击同网络的其 他计算机的跳板May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现 并报告错误却是更关键的问题。
网络中的数据包属于不同的协议,而不同协议数据包的格式也不同因此对捕获的数据进行解码,将 包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协 议,而不仅仅只支持 tcp、 udp 等低层协议从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直 接打印输出的显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump截获数据并保存到文件中,然后再使用 其他程序进行解码分析当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘FreeBSD提供的一个有效的解码程序为 tcpshow,它可以通过 Packages Collection 来安装 pkg_add /cdrom/packages/security/tcpshow*# tcpdump -c 3 -w tcpdump.out tcpdump: listening on fxp0# tcpshow < tcpdump.outPacket 1TIME:12:00:59.984829LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026 <*** No decode support for encapsulated protocol ***>Packet 2TIME:12:01:01.074513 (1.089684)LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARPARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=requestsender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3 target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3Packet 3TIME:12:01:01.985023 (0.910510)LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026tcpshow 能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择最合适的参数对截获的 数据包进行分析。
从上面的例子中可以看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就无法进行解码除了 tcpdump之外,FreeBSD的Packages Collecion中还提供了 Ethereal和Sniffit两个网络分析工具,以及其他一些基于网 络分析方式的安全工具其中Ethereal运行在X Window下,具有不错的图形界面,Sniffit使用字符窗口形式,同样也易于操作 然而由于tcpdump对过滤规则的支持能力更强大,因此系统管理员仍然更喜欢使用它对于有经验的网络管理员,使用这些网络分析 工具不但能用来了解网络到底是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那 个主机最繁忙,网络瓶颈位于何处等等问题因此网络分析工具是用于网络管理的宝贵系统工具为了防止数据被滥用的网络分析工 具截获,关键还是要在网络的物理结构上解决常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防止外部网段 窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时的数据安全问题如果没有足够的经费将网络上的共享集线器升 级为以太网交换机,可以使用FreeBSD系统执行网桥任务。
这需要使用option BRIDGE编译选项重新定制内核,此后使用bridge命 令启动网桥功能tcpdump采用命令行方式,它的命令格式为:tcpdump [ -adeflnNOpqStvx ] [ -c 数量][-F 文件名][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ](2). tcpdump的表达式介绍表达式是一个正则表达式,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 net 202.0.0.0指明目的网络地址是202.0.0.0如果没有指明方向关键字,则缺省是src or dst关键字第三种是协议的关键字,主要包括fddi,ip,arp,rarp, tcp,udp等类型Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是〃ether〃的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进 行处理和分析其他的几个关键字就是指明了监听的包的协议内容如果没有指定任何协议,则tcpdump将会监听所有协议的信息包除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '!',与运算是'and',' &&或运算 是'or','丨丨’;这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下 面举几个例子来说明A想要截获所有210.27.48.1的主机收到的和发出的所有的数据包:#tcpdump hos t 210.27.48.1B想要截获主机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 hos t 210.27.48.1 and ! 210.27.48.2D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:#tcpdump tcp port 23 host 210.27.48.1(3). tcpdump的输出结果介绍F面我们介绍几种典型的tcpdump命令的输出信息A,数据链路层头信息使用命令#tcpdump --e host ice ice是一台装有linux的主机,她的MAC地址是0: 90: 27: 58: AF: 1AH219是一台装有S0LARIC的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:la是主机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:la是主机ICE的MAC地址C,TCP 包的输出信息用TCPDUMP捕获的TCP包的一般输出信息是:src > dst: flags data-seqno ack window urgent optionssrc > 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 lenthUDP十分简单,上面的输出行表明从主机ROUTE的portl端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP,包的长 度是 lenth(1). tcpdump的选项介绍-a-d -dd -ddd -e -f -l -n -t -v-vv-c-F-i -r -w -T将网络地址和广播地址转变成名字; 将匹配信息包的代码以人们能够理解的汇编格式给出; 将匹配信息包的代码以c语言程序段的格式给出; 将匹配信息包的代码以十进制的形式给出; 在输出行打印出数据链路层的头部信息;将外部的Internet地址以数字的形式打印出来;使标准输出变为缓冲行形式;不把网络地址转换成名字; 在输出的每一行不打印时间戳; 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;输出详细的报文信息;在收到指定的包的数目后,tcpdump就会停止;从指定的文件中读取表达式,忽略其它的表达式;指定监听的网络接口;从指定的文件中读取包(这些包一般通过-w选项产生);直接将包写入文件中,并不分析和打印出来;将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)。




