文、張明泰 (mtchang.tw@gmail.com)

D018.jpg  

netstat 是一個可以查詢本機網路和外界網路連線的指令,可以透過這個指令查詢得知有沒有奇怪的連線在你的機器,也可透過指令瞭解電腦連線的狀況。這個指令windows 上也有,Linux上也有,但在參數與用法有一些不同。Windows 上得說明可以參考 MS公司的 netstat 說明(http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true)節錄及翻譯如下:

語法:
netstat [-a] [-e] [-n] [-o] [-p Protocol] [-r] [-s] [Interval]

參數:
-a : 顯示所有活動中的 TCP 連線,及 TCP and UDP ports 上聆聽中的資訊。
-e : 顯示網路的統計資訊,如 bytes 數和封包發送和接收的數量.這參數通常和 -s 並用。
-n : 顯示活動的TCP連線,但是 ip address和port編號沒有被解釋翻譯成為名稱說明。(通常可以加速顯示的速度因為反解通常需要查詢 dns 的時間)
-o : 顯示活動的 TCP 連線並且包含每個連線程序的 ID 編號(PID).你能夠找到應用程式的程序的PID資訊,在 windows 的工作管理員。這個參數通常和 -a, -n, and -p 混合使用.
-p 通訊協定 : 顯示指連線的通訊協定.預設的狀況這個通訊協定包含 tcp, udp, tcpv6, or udpv6. 如果配合 -s 參數則是可以顯示統計數量。
-s : 顯示統計資訊。預設顯示 TCP, UDP, ICMP, and IP 通訊協定. 如果 IPv6 protocol for Windows XP 被安裝的話, 統計資料顯示 TCP over IPv6, UDP over IPv6, ICMPv6, and IPv6 protocols.
-r : 顯示 IP 路由表的內容. 相當於 route print 命令.
Interval : 每隔幾秒重新顯示資訊. 按 CTRL+C 可以停止顯示. 如果省略則只顯示一次。
/? : 此說明

netstat –e   顯示網路的統計資訊,如 bytes 數和封包發送和接收的數量。201112291pic0000.jpg   
netstat –n  顯示活動TCP連線,但是 ip address和port編號沒有被解釋翻譯成為名稱。
201112291pic0001.jpg  

netstat –o  顯示活動的 TCP 連線並且包含每個連線程序的 ID 編號(PID)。201112291pic0002.jpg   
netstat -on 5  顯示活動的 TCP 連線,不翻譯DNS名稱,每隔五秒顯示更新。
201112291pic0003.jpg  
 
在這些資訊中,Proto 協定有兩個選項TCP及UDP,Local Address 是指的是本地端的位置及port編號對應遠端的 Foreign Address 位置,State 則表示的此連線狀態狀況。通常我們對於LISTEN及 ESTABLISHED 的連線需要特別注意,因為那是和本台電腦有建立通訊連線服務。至於狀態有很多種不同的方式與型態,須要先瞭解關於TCP 連線的的溝通方式。
 
Protocol的執行過程描述:
下圖描述為一張簡化的TCP狀態圖,更詳細的動作可以看javed &rzaghal(
http://www.medianet.kent.edu/techreports/TR2005-07-22-tcp-EFSM.pdf)

寫的這篇以下引用自 http://en.wikipedia.org/wiki/Transmission_Control_Protocol201112291pic0004.jpg  
 
TCP通訊過程可分為三個階段。且必須正確建立連接在一個很多步驟的交握處理(handshake process)然後才進入建立連接(connection establishment),再進入資料傳輸(data transfer) 階段。資料傳輸完成後,最後連接終止(connection termination)建立的虛擬通道關閉並釋放所有分配的資源。

一個TCP連接是由作業系統所管理,TCP連線基本上經歷底下這些變化:
 1. LISTEN:如果是服務程式的話,指的是等待連接請求從任何遠端的客戶端。
 2. SYN-SENT:等待遠端點對點發回一個 TCP segment 並帶有 SYN 和 ACK flag。通常做這件事的為TCP客戶端。
 3. SYN-RECEIVED:等待遠端通道的另一端發回一個確認後發回確認連接到遠程節點。通常做這件事的為TCP服務端。
 4. ESTABLISHED: port 準備好接收/及發送數據從到遠端節點。
 5. FIN-WAIT-1主動端發出FIN至被動端, 並等待被動端回應FIN的ACK
 6. FIN-WAIT-2成功接收到先前傳送至被動端FIN的ACK, 此刻等待被動端傳送FIN
 7. CLOSE-WAIT被動端已接收主動端的FIN, 並傳送FIN的ACK至主動端, 此刻等待AP要求關閉連線
 8. CLOSING進入CLOSING狀態雙方都同意關閉
 9. LAST-ACK先前收到主動端的FIN, 且傳送FIN的ACK給主動端, 另被動端傳送FIN給主動端, 此刻被動端等待主動端回應FIN的ACK
10. TIME-WAIT:指等待足夠的時間,以確保通過遠端對等機器收到確認其連接終止請求。根據 RFC 793中的連接可以等到最久為四分鐘。
11. CLOSED 連線不存在於連線表
詳細網路協定可以參考:市面上的TCP/IP 書籍
在 Linux 上也有一樣的指令,只是語法有點不同原理是一樣的。使用 Linux man 也可以拿到上面描述的文件.
以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat –na  顯示主機上所有已建立的連線。201112291pic0005.jpg  
 
netstat -an | grep :22   顯示所有 port 22 的 sshd的連線 。
201112291pic0006.jpg  
netstat -alpn 列出連線的協定及使用的應用程式,使用IP顯示。
201112291pic0007.jpg  
以上是 Windows 及 Linux 的用法透過簡單的netstat指令可以用來判斷常見的系統及網路問題
如果還是沒辦法解可以試試看在 windows 上的 TCPView v3.04 這個軟體,
http://technet.microsoft.com/en-us/sysinternals/bb897437TCPView是一個 Windows程序,它會顯示所有TCP和UDP服務的狀態,包括本地和遠端位址和狀態的TCP連接狀態。還可以觀測每個程序所發送的流量狀態 是個用來取代 netstat 的好用工具。201112291pic0008.jpg  
2011-12-13-11214.gif     

, , , , , ,

lccnetvip 發表在 痞客邦 PIXNET 留言(0) 人氣()