解析Linux网络分析的三大利器(转)[@more@]
随着Internet的迅猛发展,网络已无处不在,但是,它可能随时受到来自各方的攻击。了解哪些人正在访问资源、哪些人正在享受服务、哪些人正在发送大量垃圾等,对网络管理员来说是非常必要的。利用Linux中较常见的网络分析工具Tcpdump、Nmap和Netstat,可以使网络管理工作更加轻松。
Tcpdump主要是截获通过本机网络接口的数据,用以分析。Nmap是强大的端口扫描工具,可扫描任何主机或网络。Netstat可用来检查本机当前提供的服务及状态。这三者各有所长,结合起来,就可以比较透彻地了解网络状况。
Tcpdump
Tcpdump能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。由于Tcpdump只能收集通过本机的数据,因此它的应用受到了一些限制,大多应用在网关或服务器自我检测上。例如,在作为网关的主机上,想知道本地网络中IP地址为192.168.0.5的主机现在与外界通信的情况,就可以使用如下命令:
tcpdump -i eth0 src host 192.168.0.5
在默认情况下,Tcpdump会将数据输出到屏幕。如果数据量太大,可能根本看不清具体的内容,这时我们可以把它重定向到文件再进行分析。如果眼神不错,就可以清楚地了解这位仁兄刚才的一举一动:
访问了新浪网主页
20:05:32.473388 192.168.0.5.1872 > www.sina.com.http:
S 1372301404:1372301404(0) win 64240
1460,nop,nop,sackOK> (DF)……进行了netbios广播进行名字查询20:05:33.823388 192.168.0.5.netbios-dgm >192.168.0.255.netbios-dgm: NBT UDP PACKET(138)……到新华网POP3服务器收信20:05:41.953388 192.168.0.5.1878 > pop.xinhuanet.com.pop3: S1374956462:1374956462(0) win 64240 (DF)……到深圳963收信20:05:45.633388 192.168.0.5.1881 > szptt154.szptt.net.cn.pop3:P 34:40(6) ack 146 win 64095 (DF)……例如,上面这条信息表明了在20:05:45的时候,192.168.0.5通过1881源端口连接到963电子邮局的POP3端口。对于普通的网络分析,这些信息已经足够了。这就是Tcpdump的基本功能,其它高级功能都是在这一基础上的细化和增强。例如,我只想知道192.168.0.5当前正在访问哪些Web站点,可以用下面这条命令:tcpdump -i eth0 src host 192.168.0.5 and dst port 80该命令的目的是截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包。得到的数据如下:20:05:32.473388 192.168.0.5.1872 > www.sina.com.http:S 1372301404:1372301404(0) win 64240 (DF)……20:06:33.42344 192.168.0.5.1873 > www.sohu.com.http:S 1374301404:1374301404(0) win 64245 (DF)……20:07:31.343248 192.168.0.5.1874 > www.21cn.com.http:S 1377301404:1377301404(0) win 64241 (DF)……显然,通过and或者not这些逻辑组合,就可以得到特定的数据。Tcpdump还可以监听不同的数据类型(如TCP、UDP),以用不同的网络范围(如Host主机、Net网络),甚至用Ether直接指定物理地址。用Tcpdump在网络中获取信息如此清晰,是不是有一种一览无余的感觉。正是因为Tcpdump功能过于强大,连个人隐私和敏感数据的保护都成了问题,所以通常只有root用户能够使用这一工具。NmapNmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMP echo探测主机是否开启。凡是了解TCP/IP协议的都知道,对于一个TCP端口,无论是否使用防火墙进行过滤,该主机都会对该端口发出的请求做出一定响应。所以即使配置了严格的防火墙规则,nmap照样可以找到这些主机。例如,在一台IP地址为192.168.0.1的Linux主机上执行下列命令:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all它的作用就是对所有ICMP echo不予理睬,也就是让通常用来测试网络的Ping命令失效。这样至少可以抵挡POD(Ping of Death)的攻击。在任何一台机器上Ping这台主机,得到的都会是请求超时,如:Pinging 192.168.0.1 with 32 bytes of data:Request timed out.Request timed out.Request timed out.Request timed out.Ping statistics for 192.168.0.1:Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)这台主机是否下线了?用Nmap探测试试看:nmap -sP 192.168.0.1Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )Host gw.somewhere.net (192.168.0.1) appears to be up.探测结果好像该主机还开着呢!这里,-sP指定使用Ping echo 进行扫描(Scan)。利用这一特点,可以很快知道目的网络究竟有多少主机处于运行状态:nmap -sP 192.168.0.0/24 //24表明目标是一个网络而非单个主机Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )Host (192.168.0.2) appears to be up.Host www.somesite.net (192.168.0.5) appears to be up.Host (192.168.0.8) appears to be up.……Host (192.168.0.253) appears to be up.Host fake.somesite.net (192.168.0.254) appears to be up.Nmap run completed -- 256 IP addresses (19 hosts up) scanned in 6 seconds既然已经知道了哪些主机还开着,就可以进一步探测这些主机的信息,如开启的端口、提供的服务及操作系统类型等。从上面扫描的结果可以知道,192.168.0.5这台机器正在运行。想要了解该主机的详细信息,可以执行:nmap 192.168.0.5稍后会显示如下内容:Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )Interesting ports on www.somewhere.net (192.168.0.5):(The 1537 ports scanned but not shown below are in state: closed)Port State Service80/tcp open http135/tcp open loc-srv139/tcp open netbios-ssn443/tcp open https1031/tcp open iad21433/tcp open ms-sql-sNmap run completed -- 1 IP address (1 host up) scanned in 0 seconds由上可以断定,这是一台运行Windows操作系统的主机,因为它开启了MS SQL Server的专用端口1433,还提供了HTTP服务等。这些信息如果被不怀好意的人得到,就可以采用对应的攻击办法。其实,强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统。我们可以用-O来开启这一选项:nmap -O 192.168.0.5得到的结果是:Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )Interesting ports on www.somewhere.net (192.168.0.5):(The 1536 ports scanned but not shown below are in state: closed)Port State Service80/tcp open http135/tcp open loc-srv139/tcp open netbios-ssn443/tcp open https1032/tcp open iad31433/tcp open ms-sql-sRemote operating system guess: Microsoft NT 4.0 Server SP5 + 2047 HotfixesNmap run completed -- 1 IP address (1 host up) scanned in 2 seconds它猜测的远程主机类型是Microsoft NT 4.0 Server SP5 + 2047 Hotfixes,并且相当准确和详尽。NetstatNetstat主要用于Linux/Unix主机察看自身的网络状况,如开启的端口、在为哪些用户服务以及服务的状态等等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态察看工具,不过中规中举。例如在一台普通Linux服务器上运行Netstat,显示可能像这样:Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHEDtcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHEDtcp 0 0 xxx.net.ssh whoami.net:1867 ESTABLISHEDtcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHEDtcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHEDActive UNIX domain sockets (w/o servers)Proto RefCnt Flags Type State I-Node Pathunix 8 [ ] DGRAM 858 /dev/logunix 2 [ ] DGRAM 190986unix 2 [ ] DGRAM 190051unix 2 [ ] DGRAM 1252unix 2 [ ] DGRAM 1233unix 2 [ ] DGRAM 1049unix 2 [ ] DGRAM 867unix 2 [ ] STREAM CONNECTED 507下半部分被称作Unix域套接口,通常不必在意。有用的是上半部被称为有源TCP连接的部分,它显示了当前所有已建立的连接。由此不难看出,当前这台服务器与主机myself.net有一些处于半关闭状态的HTTP连接,还与主机whoami.net有一个SSH连接。在默认情况下,Netstat只显示已建立连接的端口。要显示处于监听状态的所有端口,使用-a参数即可:Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 *:http-alt *:* LISTENtcp 0 0 *:8009 *:* LISTENtcp 0 0 *:mysql *:* LISTENtcp 0 0 *:netbios-ssn *:* LISTENtcp 0 0 *:http *:* LISTENtcp 0 0 *:ftp *:* LISTENtcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHEDtcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHEDtcp 0 0 xxx.net.ssh myself.net:1867 ESTABLISHEDtcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHEDtcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED……这样,当前正在监听但并未建立连接的端口也可以显示了出来。由此不难看出,这台服务器同时提供HTTP、FTP、SSH、NMBD及一个MySQL数据库服务。Netstat还可以方便地代替route命令显示当前核心路由表:netstat -rKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface218.208.80.176 * 255.255.255.248 U 40 0 0 eth1192.168.0.0 * 255.255.255.0 U 40 0 0 eth0127.0.0.0 * 255.0.0.0 U 40 0 0 lodefault x.x.x.x 0.0.0.0 UG 40 0 0 eth1以上结果与route显示完全一样。此外,它还可以代替ifconfig显示网络接口状态:netstat -iKernel Interface tableIface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgeth0 1500 0 3441803 0 0 0 3717339 0 0 0 BMRUeth0: 1500 0 - no statistics available - BMRUeth0: 1500 0 - no statistics available - BMRUeth1 1500 0 1770949 0 0 0 1496183 0 0 0 BMRUlo 16436 0 38255 0 0 0 38255 0 0 0 LRU以上这些表明,利用网络分析工具了解网络的状况非常简单,几乎不费什么力气就可以获取很多有用的数据。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-944539/
,如需转载,请注明出处,否则将追究法律责任。