歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 解析Linux網絡分析的三大利器 [轉貼]

解析Linux網絡分析的三大利器 [轉貼]

日期:2017/3/6 15:30:36   编辑:關於Unix
解析Linux網絡 分析的三大利器 [轉貼] 隨著Internet的迅猛發展,網絡 已無處不在,但是,它可能隨時受到來自各方的攻擊。了解哪些人正在訪問資源、哪些人正在享受服務、哪些人正在發送大量垃圾等,對網絡 管理員來說是非常必要的。利用Linux中較常見的網絡

解析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 <mss
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: S
1374956462:1374956462(0) win 64240 <mss 1460,nop,nop,sackOK> (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 <mss 1460,nop,nop,sackOK> (DF)
……
20:06:33.42344 192.168.0.5.1873 >
www.sohu.com.http:
S 1374301404:1374301404(0) win 64245 <mss 1460,nop,nop,sackOK> (DF)
……
20:07:31.343248 192.168.0.5.1874 >
www.21cn.com.http:
S 1377301404:1377301404(0) win 64241 <mss 1460,nop,nop,sackOK> (DF)
……



顯然,通過and或者not這些邏輯組合,就可以得到特定的數據。Tcpdump還可以監聽不同的數據類型(如TCP、UDP),以用不同的網絡范圍(如Host主機、Net網絡),甚至用Ether直接指定物理地址。

用Tcpdump在網絡中獲取信息如此清晰,是不是有一種一覽無余的感覺。正是因為Tcpdump功能過於強大,連個人隱私和敏感數據的保護都成了問題,所以通常只有root用戶能夠使用這一工具。


Nmap


Nmap設計的初衷是系統管理員可以方便地了解自己的網絡運行情況,例如有多少台主機在運行、分別提供什麼樣的服務。因此,它掃描的速度非常快,尤其適合大型網絡。在對網絡進行掃描時,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.1
Starting 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 Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
1031/tcp open iad2
1433/tcp open ms-sql-s
Nmap 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 Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
1032/tcp open iad3
1433/tcp open ms-sql-s
Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047 Hotfixes
Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds



它猜測的遠程主機類型是Microsoft NT 4.0 Server SP5 + 2047 Hotfixes,並且相當准確和詳盡。


Netstat


Netstat主要用於Linux/Unix主機察看自身的網絡狀況,如開啟的端口、在為哪些用戶服務以及服務的狀態等等。此外,它還顯示系統路由表、網絡接口狀態等。可以說,它是一個綜合性的網絡狀態察看工具,不過中規中舉。

例如在一台普通Linux服務器上運行Netstat,顯示可能像這樣:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED
tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED
tcp 0 0 xxx.net.ssh whoami.net:1867 ESTABLISHED
tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED
tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 858 /dev/log
unix 2 [ ] DGRAM 190986
unix 2 [ ] DGRAM 190051
unix 2 [ ] DGRAM 1252
unix 2 [ ] DGRAM 1233
unix 2 [ ] DGRAM 1049
unix 2 [ ] DGRAM 867
unix 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 State
tcp 0 0 *:http-alt *:* LISTEN
tcp 0 0 *:8009 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED
tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED
tcp 0 0 xxx.net.ssh myself.net:1867 ESTABLISHED
tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED
tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED
……



這樣,當前正在監聽但並未建立連接的端口也可以顯示了出來。由此不難看出,這台服務器同時提供HTTP、FTP、SSH、NMBD及一個MySQL數據庫服務。

Netstat還可以方便地代替route命令顯示當前核心路由表:

netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
218.208.80.176 * 255.255.255.248 U 40 0 0 eth1
192.168.0.0 * 255.255.255.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default x.x.x.x 0.0.0.0 UG 40 0 0 eth1



以上結果與route顯示完全一樣。

此外,它還可以代替ifconfig顯示網絡接口狀態:

netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 3441803 0 0 0 3717339 0 0 0 BMRU
eth0: 1500 0 - no statistics available - BMRU
eth0: 1500 0 - no statistics available - BMRU
eth1 1500 0 1770949 0 0 0 1496183 0 0 0 BMRU
lo 16436 0 38255 0 0 0 38255 0 0 0 LRU



以上這些表明,利用網絡分析工具了解網絡的狀況非常簡單,幾乎不費什麼力氣就可以獲取很多有用的數據。



Copyright © Linux教程網 All Rights Reserved