(2)参数分析
TCPDump支持多种不同参数,如使用-i参数指定TCPDump监听的网络界面,这在计算机具有多个网络界面时非常有用;使用-c参数可以指定要监听的数据包数量;使用-w参数指定将监听到的数据包写入文件中保存,等等。然而,在数据的海洋中,TCPDump中更复杂的参数主要是用于过滤。这是为什么呢?
因为在实际操作中,网络中流量很大,如果将所有的数据包都截留下来,数据量就会很大,反而不容易发现所需要的数据包。如果不带任何参数,TCPDump就会搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。所以,我们应当先想好需要哪些数据,TCPDump的语法为:
TCPDump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面 >][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][- w<数据包文件>][输出数据栏位]
在实际使用中,我们可以灵活应用。现列举几个比较常用的例子:
1、截获所有192.168.10.1的主机收到的和发出的所有数据包。命令为:
TCPDump host 192.168.10.1
实际效果如图29所示。

图 29
2、截获主机192.168.10.1和主机192.168.10.2或192.168.10.3的通信,使用命令(在命令行中适用括号时,一定要):
#tcpdump host 192.168.10.1 and \ (192.168.10.2 or 192.168.10.3 \)
3、如果想要获取主机192.168.10.123接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 192.168.10.123
4、获取主机192.168.10.1除了和主机192.168.10.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 192.168.10.1 and ! 192.168.10.2
3、Linux服务器实例分析
通过上面的操作了解,相信很多电脑爱好者在Linux技术上有了一个质的飞跃。下面,我们综合运用这些方法来解决一个Linux服务器上安装问题。下面是一个针对邮件服务器的网络故障分析。某单位的局域网中有一台Sendmail邮件服务器,收发邮件等基本功能正常,但在使用中发现一个普遍的怪现象:在PC机上发邮件时,连接邮件服务器后,要等待很长时间才能开始工作。从检测来看,网络连接没有问题,邮件服务器和PC性能都没有问题,问题可能出在哪里呢?
为了查找问题的所在,可以采用以下的测试方法。首先,我们在PC机client上发送邮件,同时在邮件服务器server上使用TCPDump对这个client的数据包进行捕获分析,如下:
|
#TCPDump host client
TCPDump: listening on hme0
23:41:30.040578 client.1065 > server.smtp: S 1087965815:1087965815(0) win 64240 (DF)
23:41:30.040613 server.smtp > client.1065: S 99285900:99285900(0) ack 1087965816 win 10136 (DF)
23:41:30.040960 client.1065 > server.smtp: . ack 1 win 64240 (DF) |
然后,通过分析数据,我们看到双方顺利的完成了会话,也就是说,到目前为止,整个状态属于正常的现象。沿着这个思路,我们往下看:
|
23:41:30.048862 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
23:41:40.161052 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
23:41:56.061130 server.33152 > client.113: R 99370917:99370917(0) win 8760 (DF)
23:41:56.070108 server.smtp > client.1065: P 1:109(108) ack 1 win 10136 (DF) |
通过分析就可以判断问题所在了。原来,问题在于:我们看到server端试图连接client的113端口,要求认证,但是没有收到client端的回应,server端重复尝试了3次,费时26秒后,才放弃认证请求,并主动发送了reset标志的数据包,开始push后面的数据;而正是在这个过程中所花费的26秒时间,造成了发送邮件时漫长的等待情况。问题找到后,通过修改服务器端的Sendmail配置,再次测试,看到邮件服务器不再进行113端口的认证尝试,而是在三次检测后直接push数据,问题得到完美的解决。
实际上,Linux中还有很多优秀的服务器功能,如DNS 服务器、CVS服务器、DHCP服务器、数据库服务器、Samba网络服务器等。正是这些优秀的功能组合,再加上完全免费的优势,使得Linux的功能越来越强大,并逐渐在激烈的操作系统市场中占据了一席之地。通过本文的讲解,相信很多用户一定会更加喜爱Linux操作系统。文章到这里,我们又想起了那只让人爱不释手的小企鹅,毫无疑问,正是它欢快自由的脚步,我们才领略到Linux世界的无穷魅力。