分类
网络数据采集分析工具TCPDUMP简介‖
windows平台上的sniffer工
式的局域网中,采用sniffe
上就是一个网络上的抓包工
息包是会广播到网络中所有
络设备会判断该信息包是否
使主机的网络设备接收所有
具既可以适合于黑客的使用
,使用嗅探器可以随时掌握
工具来分析原因,找出造成
序。
具(例如,netxray和sniffer pr
r工具简直可以对网络中的所有
具,同时还可以对抓到的包进行
主机的网络接口,只不过在没有
应该接收,这样它就会抛弃不应
到达的信息包,这样就达到了网
,也同样有利于网络管理员和网
网络的实际情况,在网络性能急
网络阻塞的来源。对于网络程序
o软件)的朋友可能都知道,在共享
流量一览无余!Sniffer工具实际
分析。由于在共享式的网络中,信
使用sniffer工具之前,主机的网
该接收的信息包,sniffer工具却
络监听的效果。其实,sniffer工
络程序员。对于网络管理人员来说
剧下降的时候,可以通过sniffer
员来说,通过sniffer工具来调试程
| Linux作为网络服务器 所以,今天我们就来看看Li | ,特别是作为路由器和网关时, nux中强大的网络数据采集分析 | 数据的采集和分析是必不可少的。 工具——TcpDump。 |
| 用尽量简单的话来定义 的定义对网络上的数据包进 | tcpdump,就是:dump the traf 行截获的包分析工具。 | fice on a network.,根据使用者 |
| 作为互联网上经典的的系统管理员必 ,成为每个高级的系统管理员分析网络, | 备工具,tcpdump以其强大的功能,灵活的截取策略 排查问题等所必备的东东之一。 |
| 顾名思义,TcpDump可以将网络中传 针对网络层、协议、主机、网络或端口的 无用的信息。 | 送的数据包的“头”完全截获下来提供分析。它支持 过滤,并提供and、or、not等逻辑语句来帮助你去掉 |
| tcpdump提供了源代码 都是非常有用的工具。tcpd 杂模式,普通用户不能正常 。因此系统中存在网络分析 全存在威胁。 | ,公开了接口,因此具备很强的 ump存在于基本的FreeBSD系统中 执行,但具备root权限的用户可 工具主要不是对本机安全的威胁 | 可扩展性,对于网络维护和入侵者 ,由于它需要将网络界面设置为混 以直接执行它来获取网络上的信息 ,而是对网络上的其他计算机的安 |
| 普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。 |
| ----------------------- |
| bash-2.02# tcpdump |
| tcpdump: listening on eth0 |
| 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 09 | 00 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 00 | 00 0000 |
| 0000 00 |
| ^C |
| ------------------------ |
| 首先我们注意一下,从上面的输出结果上可以看出来,基本上tcpdump总的的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数 |
| TcpDump的参数化支持 |
| tcpdump支持相当多的不同参数,如 机具有多个网络界面时非常有用,使用-c 听到的数据包写入文件中保存,等等。 | 使用-i参数指定tcpdump嗵耐缃缑妫庠诩扑?br>参数指定要监听的数据包数量,使用-w参数指定将监 |
| 然而更复杂的tcpdump 所有的数据包都截留下来, 过滤规则可以截留特定的数 使用参数指定要监视数据包 规则就能达到迅速定位故障 | 参数是用于过滤目的,这是因为 数据量太大,反而不容易发现需 据包,以缩小目标,才能更好的 的类型、地址、端口等,根据具 的目的。请使用man tcpdump查 | 网络中流量很大,如果不加分辨将 要的数据包。使用这些参数定义的 分析网络中存在的问题。tcpdump 体的网络问题,充分利用这些过滤 看这些过滤规则的具体用法。 |
| 显然为了安全起见,不 为了屏蔽它们,可以屏蔽内 接收或发送与本计算机无关 绕过标准的TCP/IP堆栈才行 核中取消bpfilter支持,就 | 用作网络管理用途的计算机上不 核中的bpfilter伪设备。一般情 的数据包,为了接收这些数据包 。在FreeBSD下,这就需要内核 能屏蔽tcpdump之类的网络分析 | 应该运行这一类的网络分析软件, 况下网络硬件和TCP/IP堆栈不支持 ,就必须使用网卡的混杂模式,并 支持伪设备bpfilter。因此,在内 工具。 |
| 并且当网卡被设置为混杂模式时,系 意这台系统是否被用作攻击同网络的其他 | 统会在控制台和日志文件中留下记录,提醒管理员留 计算机的跳板。 |
| May 15 16:27:20 host | 1 /kernel: fxp0: promiscuous | mode enabled |
| 虽然网络分析工具能将 对这些数据进行分析、分类 同的协议,而不同协议数据 能的展示出来,对于协议分 持很多种类的应用层协议, | 网络中传送的数据记录下来,但 统计、发现并报告错误却是更关 包的格式也不同。因此对捕获的 析工具来讲更为重要。昂贵的商 而不仅仅只支持tcp、udp等低层 | 是网络中的数据流量相当大,如何 键的问题。网络中的数据包属于不 数据进行解码,将包中的信息尽可 业分析工具的优势就在于它们能支 协议。 |
| 从上面tcpdump的输出可以看出,tcp 大部分内容是使用十六进制的形式直接打 办法是先使用带-w参数的tcpdump 截获数 析。当然也应该定义过滤规则,以避免捕 | dump对截获的数据并没有进行彻底解码,数据包内的 印输出的。显然这不利于分析网络故障,通常的解决 据并保存到文件中,然后再使用其他程序进行解码分 获的数据包填满整个硬盘。 |
| TCP功能 |
| 数据过滤 |
| 不带任何参数的TcpDum 数据对我们不一定全都需要 ,TcpDump提供以下参数供 | p将搜索系统中所有的网络接口 ,而且数据太多不利于分析。所 我们选择数据: | ,并显示它截获的所有数据,这些 以,我们应当先想好需要哪些数据 |
| -b 在数据-链路层上选择协议,包括 | ip、arp、rarp、ipx都是这一层的。 |
| 例如:tcpdump -b arp | 将只显示网络械腶rp即地址转 | 换协议信息。 |
| -i 选择过滤的网络接 以只过滤指定的接口上通过 | 口,如果是作为路由器至少有两 的数据。例如: | 个网络接口,通过这个选项,就可 |
| tcpdump -i eth0 只显示通过eth0接口上的所有报头。 |
| src、dst、port、host、net、ether host、net、ehost等附加选项。他们用来 定源主机IP地址是192.168.0.1,dst net 类推,host是与其指定主机相关无论它是 跟的不是IP地址而是物理地址,而gatewa 道了: | 、gateway这几个选项又分别包含src、dst 、port、 分辨数据包的来源和ハ颍瑂rc host 192.168.0.1指 192.168.0.0/24指定目标是网络192.168.0.0。以此 源还是目的,net是与其指定网络相关的,ether后面 y则用于网关主机。可能有点复杂,看下面例子就知 |
| tcpdump src host 192 | .168.0.1 and dst net 192.168 | .0.0/24 |
| 过滤的是源主机为192.168.0.1与目 | 的网络为192.168.0.0的报头。 |
| tcpdump ether src 00:50:04:BA:9B | and dst…… |
| 过滤源主机物理地址为 然不可能有网络喽)。 | XXX的报头(为什么ether src后 | 面没有host或者net?物理地址当 |
| Tcpdump src host 192 | .168.0.1 and dst port not te | lnet |
| 过滤源主机192.168.0.1和目的端口不是telnet的报头。 |
| ip icmp arp rarp 和 tcp、udp、ic 数据报的类型。 | mp这些选项等都要放到第一个参数的位置,用来过滤 |
| 例如: |
| tcpdump ip src…… |
| 只过滤数据-链路层上的IP报头。 |
| tcpdump udp and src host 192.168.0.1 |
| 只过滤源主机192.168.0.1的所有udp报头。 |
| 数据显示/输入输出 |
| TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示: |
| -l 可以将数据重定向。 |
| 如tcpdump -l >tcpcap.txt将得到 | 的数据存入tcpcap.txt文件中。 |
| -n 不进行IP地址到主机名的转换。 |
| 如果不使用这一项,当 名显示,就像这样:eth0 eth0 < 192.168.0.9.1165 | 系统中存在某一主机的主机名时 < ntc9.1165> router.domain > 192.168.0.1.telnet。 | ,TcpDump会把IP地址转换为主机 .net.telnet,使用-n后变成了: |
| -nn 不进行端口名称的转换。 |
| 上面这条信息使用-nn | 后就变成了:eth0 < ntc9.116 | 5 > router.domain.net.23。 |
| -N 不打印出默认的域名。 |
| 还是这条信息-N 后就 | 是:eth0 < ntc9.1165 > rou | ter.telnet。 |
| -O 不进行匹配代码的优化。 |
| -t 不打印UNIX时间戳,也就是不显示时间。 |
| -tt 打印原始的、未格式化过的时间。 |
| -v 详细的输出,也就比普通的多了个TTL和服务类型。 |
| TCPDUMP的安装 |
| 在linux下tcpdump的安 安装。另外一种是以源程序 | 装十分简单,一般由两种安装方 的形式安装。 | 式。一种是以rpm包的形式来进行 |
| 1. rpm包的形式安装 |
| #rpm -ivh tcpdump-3_4a5.rpm |
| 这样tcpdump就顺利地安装到你的linux系统中。怎么样,很简单吧。 |
| 2. 源程序的安装 |
| #tar xvfz tcpdump-3_4a5.tar.Z |
| rpm的包可以使用如下命令安装: |
| #rpm -ivh tcpdump-3_4a5.src.rpm |
| 这样就把tcpdump的源 | 代码解压到/usr/src/redhat/SO | URCES目录下. |
| 第二步 做好编译源程序前的准备活动 |
| 在编译源程序之前,最好已经确定库 件所需的库文件 。同样,你同时还要有 译器一般是gcc。 在tcpdump的源程序目 是从Makefile.in文件中自动产生Makefil 来修改BINDEST 和 MANDEST 这两个宏定 | 文件libpcap已经安装完毕,这个库文件是tcpdump软 一个标准的c语言编译器。在linux下标准的c 语言编 录中。有一个文件是Makefile.in,configure命令就 e文件。在Makefile.in文件中,可以根据系统的配置 义,缺省值是 |
| BINDEST = @sbindir@ |
| MANDEST = @mandir@ |
| 第一个宏值表明安装tc 的路径名,你可以修改它们 | pdump的二进制文件的路径名, 来满足系统的需求。 | 第二个表明tcpdump的man 帮助页 |
| 第三步 编译源程序 |
| 使用源程序目录中的co Makefile.in文件自动生成M 规则编译tcpdump的源程序 | nfigure脚本,它从系统中读出 akefile文件,以便编译使用.ma 。使用make install命令安装编 | 各种所需的属性。并且根据 ke 命令则根据Makefile文件中的 译好的tcpdump的二进制文件。 |
| 总结一下就是: |
| # tar xvfz tcpdump-3_4a5.tar.Z |
| # vi Makefile.in |
| # . /configure |
| # make |
| # make install |