解析Linux網路分析的三大利器(轉)

post0發表於2007-08-11
解析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 >

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: S

1374956462: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 >

S 1372301404:1372301404(0) win 64240 (DF)

……

20:06:33.42344 192.168.0.5.1873 >

S 1374301404:1374301404(0) win 64245 (DF)

……

20:07:31.343248 192.168.0.5.1874 >

S 1377301404:1377301404(0) win 64241 (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 (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 (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 (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

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944539/,如需轉載,請註明出處,否則將追究法律責任。

相關文章