Linux网络分析工具

1.tcpdump

说实在的,对于tcpdump这个软件来说,你甚至能说这个软件其实就是个黑客软件,因为他不仅能分析数据包的流向,连数据包的内容也能进行监听,如果你使用的传输数据是明文的话,在Router上就可能被人家监听走了。非常可怕。所以,我们也要来了解一下这个软件(注:这个tcpdump必须使用root的身份执行)。
[root@linux ~]# tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae]
                        [-qX] [-r 文件] [所欲捕捉的数据内容]
参数:
-nn,直接以 IP 及 Port Number 显示,而非主机名和服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,
     直到用户输入 [ctrl]-c 为止。
-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,能列出十六进制 (hex) 及 ASCII 的数据包内容,对于监听数据包内容非常有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已存在的文件,
     并且这个「文件」是由 -w 所制作出来的。
所欲捕捉的数据内容:我们能专门针对某些通信协议或是 IP 来源进行数据包捕捉。
     那就能简化输出的结果,并取得最有用的信息。常见的表示方法有。
     ’host foo’, ’host 127.0.0.1’ :针对单台主机来进行数据包捕捉。
     ’net 192.168’ :针对某个网段来进行数据包的捕捉。
     ’src host 127.0.0.1’ ’dst net 192.168’:同时加上来源(src)或目标(dst)限制。
     ’tcp port 21’:还能针对通信协议检测,如tcp、udp、arp、ether 等。
     还能利用 and 和 or 来进行数据包数据的整合显示呢。
范例一:以 IP 和 Port Number 捉下 eth0 这个网卡上的数据包,持续 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win
9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win
9648
如果你是第一次看tcpdump的man page时,肯定会晕菜的,因为tcpdump几乎都是分析数据包的表头数据,用户如果没有简单的网络数据包基础知识,要看懂非常困难。所以,至少你得要回到第2章“网络基础”里面去好好理解一下TCP数据包的表头信息才好。至于那个在范例一所产生的输出中,我们能大概区分为几个字段,现以范例一当中那行特别字体行来说明一下:
? 01:33:40.41:这个是此数据包被捕捉的时间,“时:分:秒”的单位。
? IP:通过的通信协议是IP。
? 192.168.1.100.22>:传送端是192.168.1.100这个IP,而传送的Port Number为22,那个大于(>)的符号指的是数据包的传输方向。
? 192.168.1.11.1190:接收端的IP是192.168.1.11,且该主机开启port 1190来接收。
? P 116:232(116):这个数据包带有PUSH的数据传输标志,且传输的数据为整体数据的116~232 Byte,所以这个数据包带有116 Bytes的数据量。
? ack 1 win 9648:ACK和Window size的相关资料。
最简单的说法,就是该数据包是由192.168.1.100传到192.168.1.11,通过的port是由22到1190,且带有116 Bytes的数据量,使用的是PUSH的标记,而不是SYN之类的主动联机标志。不容易看得懂吧。所以,我才会讲请务必到“TCP表头数据”的章节去看一看。
接下来,在一个网络状态非常忙的主机上面,你想要取得某台主机对你联机的数据包数据时,使用tcpdump配合管线命令和正则表达式也能,不过,毕竟不好捕捉。我们能通过tcpdump的表达式功能,就能够轻易地将所需要的数据独立的取出来。在上面的范例一当中,我们仅针对eth0做监听,所以整个eth0接口上面的数据都会被显示到屏幕上,但这样不好分析,能简化吗?例如,只取出port 21的联机数据包,能这样做:
[root@linux ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240:P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 21 win 65515
01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21:P 1:17(16) ack 21 win 65515
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
看!这样就仅取出port 21的信息,如果仔细看的话,你会发现数据包的传递都是双向的,Client端发出请求而Server端则予以响应,所以,当然是有去有回了。而我们也就能经过这个数据包的流向来了解到数据包运动的过程了。例如:
? 我们先在一个终端机窗口输入“tcpdump-i lo-nn”的监听。
? 再另开一个终端机窗口来对本机(127.0.0.1)登录“ssh localhost”,那么输出的结果会是怎么?
[root@linux ~]# tcpdump -i lo -nn
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
3 11:02:54.253777 IP 127.0.0.1.32936 >
127.0.0.1.22: S 933696132:933696132(0)
   win 32767
4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936:
S 920046702:920046702(0)
   ack 933696133 win 32767
5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192
6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936:
P 1:23(22) ack 1 win 8192
   
7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192
代码显示的头两行是tcpdump的基本说明,然后:
 第3行显示的是来自Client端带有SYN主动联机的数据包。
 第4行显示的是来自Server端,除了响应Client端之外(ACK),还带有SYN主动联机的标志。
 第5行则显示Client端响应Server确定联机建立(ACK)。
 第6行以后则开始进入数据传输的步骤。
从第3~5行的流程来看,熟不熟悉啊?没错。那就是3次握手的基础流程,有趣吧。不过tcpdump之所以被称为黑客软件之一远不止上面介绍的功能。上面介绍的功能能用来作为我们主机的数据包联机和传输的流程分析,这将有助于我们了解到数据包的运作,同时了解到主机的防火墙设置规则是否有需要修订的地方。
更有更神奇的用法。当我们使用tcpdump在Router上面监听明文的传输数据时,例如FTP传输协议,你觉得会发生什么问题呢?我们先在主机端执行“tcpdump -i lo port 21 -nn ?X”,然后再以FTP登录本机,并输入账号和密码,结果你就能发现如下的状况:
[root@linux ~]# tcpdump -i lo -nn -X ’port 21’
    0x0000:  4500 0048 2a28 4000 4006 1286 7f00 0001  E..H*(@.@.......
    0x0010:  7f00 0001 0015 80ab 8355 2149 835c d825  .........U!I.\.%
    0x0020:  8018 2000 fe3c 0000 0101 080a 0e2e 0b67  .............2’
    0x0030:  0e2e 1b38 5041 5353 206d 7970 6173 7377  ...8PASS.mypassw
    0x0040:  6f72 6469 7379 6f75 0d0a                 ordisyou..
上面的输出结果已被简化过了,你需要自行在你的输出结果中搜索相关的字符串才行。从上面输出结果的特别字体中,我们能发现该FTP软件使用的是vsFTPd,并且用户输入dmtsai这个账号名称,且密码是mypasswordisyou。你说可不可怕啊。如果使用的是明文方式来传输你的网络数据呢?所以我们才常常在讲啊,网络是非常不安全的。
另外你得了解,为了让网络接口能让tcpdump监听,所以执行tcpdump时网络接口会启动在“混杂模式(promiscuous)”,所以你会在 /var/log/messages里面看到非常多的警告信息,通知你说你的网卡被设置成为混杂模式。别担心,那是正常的。至于更多的应用,请参考man tcpdump了。
例题:怎么使用tcpdump监听来自eth0适配卡且通信协议为port 22,目标来源为192.168.1.100的数据包资料?

答:tcpdump -i eth0 -nn ’port 22 and src host 192.168.1.100’。

2.ethereal

除了tcpdump这个软件之外,其实你还能使用ethereal这个好用的网络流量分析软件。ethereal分为文本界面和图像界面,文本界面的用法和tcpdump类似,不过他的命令名称为tethereal就是了。因为用法差不多,所以建议你直接使用man tethereal查阅。在Cent OS上原本就有ethereal,所以请拿出光盘来安装即可,需要同时安装ethereal和ethereal-gnome才行。
启动的方法非常简单,你需要在X Window下面,先启动一个终端机,然后直接输入ethereal后,就会出现如图5-5所示的画面

图5-5 ethereal使用范例图
简单的做法,你能单击如图5-5显示的那个按钮,会出现挑选监听的接口窗口,如图5-6所示。

图5-6 ethereal使用范例图
你应该选择要监听的接口,在这里因为是测试用的,所以鸟哥使用的是lo这个内部接口,你当然应该要选择你自己的网络接口才是。然后单击Start后,就会出现开始检测的界面了,如图5-7所示。

图5-7 ethereal使用范例图
在这个界面当中你能看到非常多类型的数据包协议,在等你处理完毕后,就能单击Stop结束监听,而开始进入如图5-8所示的数据包分析界面。

图5-8 ethereal使用范例图
数据包分析界面共分为3大区块,如图5-8所示,第一区块主要显示的是数据包的标头资料,内容有点类似tcpdump的显示结果;第二区块则是周详的表头数据,包括通信协议的内容及Socket Pair等信息。第三区块则是16进制和ASCII码的显示结果。通过这个ethereal,你就能一口气得到所需要的所有数据包内容。而且还是图像界面的,非常方便吧。通过在第一区块选择不同的数据包,就能够查阅每个数据包的数据内容了。

3.nc、netcat

这个nc能用来作为某些服务的检测,因为他能连接到某个port来进行通信,此外,还能自行启动一个port来倾听其他用户的联机,非常好用。如果在编译的时候设置GAPING_SECURITY_HOLE参数的话,这个软件还能用来取得客户端的bash。可怕吧。我们的CentOS比较人性化,并没有设置上面的参数,所以我们不能够用来作为黑客软件。不过用来取代Telnet功能已够用了(有的系统将执行文件改名为netcat了)。
[root@linux ~]# nc [IP|host] [port]
[root@linux ~]# nc -l -p [port]
参数:
-l,作为监听之用,亦即开启一个 port 来监听用户的联机。
-p,开启的这个 Port Number。
范例一:连接本地端的 port 25 查阅相关信息
[root@linux ~]# nc localhost 25
localhost.localdomain [127.0.0.1] 25 (smtp) open
220 pc.dm.tsai ESMTP Postfix
ehlo localhost
250-pc.dm.tsai
250-PIPELINING
250-SIZE 40000000
250-ETRN
quit
221 Bye
这个最简单的功能和Telnet几乎相同吧,他能检查某个服务。不过,更神奇的在后面,我们能建立两个联机来通信。举个例子来说,我们先在Client端的地方启动一个port来进行倾听:
范例二:激活一个 port 来监听用户的联机需求
[root@linux ~]# nc -l -p 20000
# 启动一个 port 20000  在主机上,如果此时使用 netstat ?tlnp。
# 就能看到系统上多出来一个 port 20000 在倾听用户的联机。
然后在主机端的地方,也利用nc来联机到客户端,并且输入一些命令看看。
[root@linux ~]# nc localhost 20000
   
此时,在主机端我们能打入一些字,你会发目前Client端会同时出现你输入的文字。如果你同时设置一些额外的参数,例如利用标准输入和输出(stdout和stdin)的话,那么就能通过这个联机来做非常多事情了。当然nc的功能不仅如此,你还能发现非常多的用途。请自行到你主机内的 /usr/share/doc/nc-1.10/scripts目录下看看这些script,有帮助的。不过,如果你需要额外地编译出含有GAPING_ SECURITY_HOLE功能,以使两端联机能进行额外命令的执行时,就需要自己下载原始码来编译了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值