解析Linux网络分析的三大利器

由 chinadoudou 在 11-05-2002 11:26 发表:

解析Linux网络分析的三大利器

随着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

  1<mss 1460,nop,nop,sackok=""> (DF)   
  2  
  3……   
  4  
  5进行了netbios广播进行名字查询   
  6  
  720:05:33.823388 192.168.0.5.netbios-dgm &gt;   
  8  
  9192.168.0.255.netbios-dgm: NBT UDP PACKET(138)   
 10  
 11……   
 12  
 13到新华网POP3服务器收信   
 14  
 1520:05:41.953388 192.168.0.5.1878 &gt; pop.xinhuanet.com.pop3: S   
 16  
 171374956462:1374956462(0) win 64240 <mss 1460,nop,nop,sackok=""> (DF)   
 18  
 19……   
 20  
 21到深圳963收信   
 22  
 2320:05:45.633388 192.168.0.5.1881 &gt; szptt154.szptt.net.cn.pop3:   
 24  
 25P 34:40(6) ack 146 win 64095 (DF)   
 26  
 27……   
 28  
 29  
 30  
 31  
 32  
 33  
 34  
 35例如,上面这条信息表明了在20:05:45的时候,192.168.0.5通过1881源端口连接到963电子邮局的POP3端口。对于普通的网络分析,这些信息已经足够了。这就是Tcpdump的基本功能,其它高级功能都是在这一基础上的细化和增强。   
 36  
 37  
 38  
 39例如,我只想知道192.168.0.5当前正在访问哪些Web站点,可以用下面这条命令:   
 40  
 41  
 42  
 43tcpdump -i eth0 src host 192.168.0.5 and dst port 80   
 44  
 45  
 46  
 47  
 48  
 49  
 50  
 51该命令的目的是截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包。得到的数据如下:   
 52  
 53  
 54  
 5520:05:32.473388 192.168.0.5.1872 &gt; www.sina.com.http:   
 56  
 57S 1372301404:1372301404(0) win 64240 <mss 1460,nop,nop,sackok=""> (DF)   
 58  
 59……   
 60  
 6120:06:33.42344 192.168.0.5.1873 &gt; www.sohu.com.http:   
 62  
 63S 1374301404:1374301404(0) win 64245 <mss 1460,nop,nop,sackok=""> (DF)   
 64  
 65……   
 66  
 6720:07:31.343248 192.168.0.5.1874 &gt; www.21cn.com.http:   
 68  
 69S 1377301404:1377301404(0) win 64241 <mss 1460,nop,nop,sackok=""> (DF)   
 70  
 71……   
 72  
 73  
 74  
 75  
 76  
 77  
 78  
 79显然,通过and或者not这些逻辑组合,就可以得到特定的数据。Tcpdump还可以监听不同的数据类型(如TCP、UDP),以用不同的网络范围(如Host主机、Net网络),甚至用Ether直接指定物理地址。   
 80  
 81  
 82  
 83用Tcpdump在网络中获取信息如此清晰,是不是有一种一览无余的感觉。正是因为Tcpdump功能过于强大,连个人隐私和敏感数据的保护都成了问题,所以通常只有root用户能够使用这一工具。   
 84  
 85  
 86  
 87  
 88  
 89Nmap   
 90  
 91  
 92  
 93  
 94  
 95Nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMP echo探测主机是否开启。凡是了解TCP/IP协议的都知道,对于一个TCP端口,无论是否使用防火墙进行过滤,该主机都会对该端口发出的请求做出一定响应。所以即使配置了严格的防火墙规则,nmap照样可以找到这些主机。例如,在一台IP地址为192.168.0.1的Linux主机上执行下列命令:   
 96  
 97  
 98  
 99echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all   
100  
101  
102  
103  
104  
105  
106  
107它的作用就是对所有ICMP echo不予理睬,也就是让通常用来测试网络的Ping命令失效。这样至少可以抵挡POD(Ping of Death)的攻击。在任何一台机器上Ping这台主机,得到的都会是请求超时,如:   
108  
109  
110  
111Pinging 192.168.0.1 with 32 bytes of data:   
112  
113Request timed out.   
114  
115Request timed out.Request timed out.Request timed out.   
116  
117Ping statistics for 192.168.0.1:   
118  
119Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)   
120  
121  
122  
123  
124  
125  
126  
127这台主机是否下线了?用Nmap探测试试看:   
128  
129  
130  
131nmap -sP 192.168.0.1   
132  
133Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )   
134  
135Host gw.somewhere.net (192.168.0.1) appears to be up.   
136  
137  
138  
139  
140  
141  
142  
143探测结果好像该主机还开着呢!这里,-sP指定使用Ping echo 进行扫描(Scan)。   
144  
145  
146  
147利用这一特点,可以很快知道目的网络究竟有多少主机处于运行状态:   
148  
149  
150  
151nmap -sP 192.168.0.0/24 //24表明目标是一个网络而非单个主机   
152  
153Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )   
154  
155Host (192.168.0.2) appears to be up.   
156  
157Host www.somesite.net (192.168.0.5) appears to be up.   
158  
159Host (192.168.0.8) appears to be up.   
160  
161……   
162  
163Host (192.168.0.253) appears to be up.   
164  
165Host fake.somesite.net (192.168.0.254) appears to be up.   
166  
167Nmap run completed -- 256 IP addresses (19 hosts up) scanned in 6 seconds   
168  
169  
170  
171  
172  
173  
174  
175既然已经知道了哪些主机还开着,就可以进一步探测这些主机的信息,如开启的端口、提供的服务及操作系统类型等。从上面扫描的结果可以知道,192.168.0.5这台机器正在运行。想要了解该主机的详细信息,可以执行:   
176  
177  
178  
179nmap 192.168.0.5   
180  
181  
182  
183  
184  
185  
186  
187稍后会显示如下内容:   
188  
189  
190  
191Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )   
192  
193Interesting ports on www.somewhere.net (192.168.0.5):   
194  
195(The 1537 ports scanned but not shown below are in state: closed)   
196  
197Port State Service   
198  
19980/tcp open http   
200  
201135/tcp open loc-srv   
202  
203139/tcp open netbios-ssn   
204  
205443/tcp open https   
206  
2071031/tcp open iad2   
208  
2091433/tcp open ms-sql-s   
210  
211Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds   
212  
213  
214  
215  
216  
217  
218  
219由上可以断定,这是一台运行Windows操作系统的主机,因为它开启了MS SQL Server的专用端口1433,还提供了HTTP服务等。这些信息如果被不怀好意的人得到,就可以采用对应的攻击办法。其实,强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统。我们可以用-O来开启这一选项:   
220  
221  
222  
223nmap -O 192.168.0.5   
224  
225  
226  
227  
228  
229  
230  
231得到的结果是:   
232  
233  
234  
235Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )   
236  
237Interesting ports on www.somewhere.net (192.168.0.5):   
238  
239(The 1536 ports scanned but not shown below are in state: closed)   
240  
241Port State Service   
242  
24380/tcp open http   
244  
245135/tcp open loc-srv   
246  
247139/tcp open netbios-ssn   
248  
249443/tcp open https   
250  
2511032/tcp open iad3   
252  
2531433/tcp open ms-sql-s   
254  
255Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047 Hotfixes   
256  
257Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds   
258  
259  
260  
261  
262  
263  
264  
265它猜测的远程主机类型是Microsoft NT 4.0 Server SP5 + 2047 Hotfixes,并且相当准确和详尽。   
266  
267  
268  
269  
270  
271Netstat   
272  
273  
274  
275  
276  
277Netstat主要用于Linux/Unix主机察看自身的网络状况,如开启的端口、在为哪些用户服务以及服务的状态等等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态察看工具,不过中规中举。   
278  
279  
280  
281例如在一台普通Linux服务器上运行Netstat,显示可能像这样:   
282  
283  
284  
285Active Internet connections (w/o servers)   
286  
287Proto Recv-Q Send-Q Local Address Foreign Address State   
288  
289tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED   
290  
291tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED   
292  
293tcp 0 0 xxx.net.ssh whoami.net:1867 ESTABLISHED   
294  
295tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED   
296  
297tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED   
298  
299  
300  
301Active UNIX domain sockets (w/o servers)   
302  
303Proto RefCnt Flags Type State I-Node Path   
304  
305unix 8 [ ] DGRAM 858 /dev/log   
306  
307unix 2 [ ] DGRAM 190986   
308  
309unix 2 [ ] DGRAM 190051   
310  
311unix 2 [ ] DGRAM 1252   
312  
313unix 2 [ ] DGRAM 1233   
314  
315unix 2 [ ] DGRAM 1049   
316  
317unix 2 [ ] DGRAM 867   
318  
319unix 2 [ ] STREAM CONNECTED 507   
320  
321  
322  
323  
324  
325  
326  
327下半部分被称作Unix域套接口,通常不必在意。有用的是上半部被称为有源TCP连接的部分,它显示了当前所有已建立的连接。由此不难看出,当前这台服务器与主机myself.net有一些处于半关闭状态的HTTP连接,还与主机whoami.net有一个SSH连接。   
328  
329  
330  
331在默认情况下,Netstat只显示已建立连接的端口。要显示处于监听状态的所有端口,使用-a参数即可:   
332  
333  
334  
335Active Internet connections (w/o servers)   
336  
337Proto Recv-Q Send-Q Local Address Foreign Address State   
338  
339tcp 0 0 *:http-alt *:* LISTEN   
340  
341tcp 0 0 *:8009 *:* LISTEN   
342  
343tcp 0 0 *:mysql *:* LISTEN   
344  
345tcp 0 0 *:netbios-ssn *:* LISTEN   
346  
347tcp 0 0 *:http *:* LISTEN   
348  
349tcp 0 0 *:ftp *:* LISTEN   
350  
351tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED   
352  
353tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED   
354  
355tcp 0 0 xxx.net.ssh myself.net:1867 ESTABLISHED   
356  
357tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED   
358  
359tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED   
360  
361……   
362  
363  
364  
365  
366  
367  
368  
369这样,当前正在监听但并未建立连接的端口也可以显示了出来。由此不难看出,这台服务器同时提供HTTP、FTP、SSH、NMBD及一个MySQL数据库服务。   
370  
371  
372  
373Netstat还可以方便地代替route命令显示当前核心路由表:   
374  
375  
376  
377netstat -r   
378  
379Kernel IP routing table   
380  
381Destination Gateway Genmask Flags MSS Window irtt Iface   
382  
383218.208.80.176 * 255.255.255.248 U 40 0 0 eth1   
384  
385192.168.0.0 *</mss></mss></mss></mss></mss>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus