Linux下的网络协议分析工具-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 截获数据并保存到文件中,然后再使用其他程序进行解码分析 。当然也应该定义过滤规则,以避免捕捉的数据包填满整个硬盘 。
TCP功能
数据过滤
不带任何参数的TcpDump将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析 。所以,我们应当先想好需要哪些数据,TcpDump提供以下参数供我们选择数据:
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的 。
例如:tcpdump -b arp 将只显示网络中的arp即地址转换协议信息 。
-i 选择过滤的网络接口,假如是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接口上通过的数据 。例如:
tcpdump -i eth0 只显示通过eth0接口上的所有报头 。
src、dst、port、host、net、ether、gateway这几个选项又分别包含src、dst 、port、host、net、ehost等附加选项 。他们用来分辨数据包的来源和去向,src host 192.168.0.1指定源主机IP地址是192.168.0.1,dst net 192.168.0.0/24指定目标是网络192.168.0.0 。以此类推,host是与其指定主机相关无论它是源还是目的,net是与其指定网络相关的,ether后面跟的不是IP地址而是物理地址,而gateway则用于网关主机 。可能有点复杂,看下面例子就知道了:
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 telnet
过滤源主机192.168.0.1和目的端口不是telnet的报头 。
ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 。
例如:
tcpdump ip src……
只过滤数据-链路层上的IP报头 。
tcpdump udp and src host 192.168.0.1
只过滤源主机192.168.0.1的所有udp报头 。
数据显示/输入输出
TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示:

推荐阅读