netstat :追蹤網絡

這個 netstat 也是挺好玩的,其實這個命令比較常被用在網絡的監控方面,不過,在程序管理方面也是需要了解! 

這個命令的運行如下所示:基本上, netstat 的輸出分爲兩大部分,分別是網絡與系統自己的程序相關性部分:


[root@instructor ~]#  netstat -[atunlp]
選項與參數:
-a  :將目前系統上所有的連線、監聽、Socket 數據都列出來
-t  :列出 tcp 網絡封包的數據
-u  :列出 udp 網絡封包的數據
-n  :不以程序的服務名稱,以端口號 (port number) 來顯示;
-l  :列出目前正在網絡監聽 (listen) 的服務;
-p  :列出該網絡服務的程序 PID 


範例一:列出目前系統已經創建的網絡連線與 unix socket 狀態
[root@instructor ~]#  netstat
Active Internet connections (w/o servers) <==與網絡較相關的部分
Proto Recv-Q Send-Q Local Address        Foreign Address      State
tcp        0    132 192.168.201.110:ssh  192.168.:vrtl-vmf-sa ESTABLISHED
Active UNIX domain sockets (w/o servers)  <==與本機的程序自己的相關性(非網絡)
Proto RefCnt Flags       Type       State         I-Node Path
unix  20     [ ]         DGRAM                    9153   /dev/log
unix  3      [ ]         STREAM     CONNECTED     13317  /tmp/.X11-unix/X0
unix  3      [ ]         STREAM     CONNECTED     13233  /tmp/.X11-unix/X0
unix  3      [ ]         STREAM     CONNECTED     13208  /tmp/.font-unix/fs7100

....(中間省略)....


在上面的結果當中,顯示了兩個部分,分別是網絡的連線以及 linux 上面的 socket 程序相關性部分。 我們先來看看網際網絡連線情況的部分:


Proto :網絡的封包協議,主要分爲 TCP 與 UDP 封包。
Recv-Q:不是由使用者程序連結到此 socket 的複製的總 bytes 數; 
Send-Q:不是由遠程主機傳送過來的 acknowledged 總 bytes 數; 
Local Address :本地端的 IP:port 情況 
Foreign Address:遠程主機的 IP:port 情況 
State :連線狀態,主要有創建(ESTABLISED)及監聽(LISTEN); 
我們看上面僅有一條連線的數據,他的意義是:透過 TCP 封包的連線,遠程的 192.168.:vrtl.. 連線到本地端的 192.168.201.110:ssh ,這條連線狀態是創建 (ESTABLISHED) 的狀態!

除了網絡上的連線之外,其實 Linux 系統上面的程序是可以接收不同程序所發送來的資訊,那就是 Linux 上頭的插槽文件 (socket file)。socket file 可以溝通兩個程序之間的資訊,因此程序可以取得對方傳送過來的數據。 由於有 socket file,因此類似 X Window 這種需要透過網絡連接的軟件,目前新版的 distributions 就以 socket 來進行窗口介面的連線溝通了。上表中 socket file 的輸出欄位有:


Proto :一般就是 unix ; 
RefCnt:連接到此 socket 的程序數量; 
Flags :連線的旗標; 
Type :socket 存取的類型。主要有確認連線的 STREAM 與不需確認的 DGRAM 兩種; 
State :若爲 CONNECTED 表示多個程序之間已經連線創建。 
Path :連接到此 socket 的相關程序的路徑!或者是相關數據輸出的路徑。 
以上的輸出爲例,最後那三行在 /tmp/.xx 底下的數據,就是 X Window 窗口介面的相關程序! 而 PATH 指向的就是這些程序要交換數據的插槽文件!

範例二:找出目前系統上已在監聽的網絡連線及其 PID
[root@instructor ~]#  netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address  State   PID/Program name
tcp        0      0 127.0.0.1:2208   0.0.0.0:*        LISTEN  4566/hpiod
tcp        0      0 0.0.0.0:111      0.0.0.0:*        LISTEN  4328/portmap
tcp        0      0 127.0.0.1:631    0.0.0.0:*        LISTEN  4597/cupsd
tcp        0      0 0.0.0.0:728      0.0.0.0:*        LISTEN  4362/rpc.statd
tcp        0      0 127.0.0.1:25     0.0.0.0:*        LISTEN  4629/sendmail: 
tcp        0      0 127.0.0.1:2207   0.0.0.0:*        LISTEN  4571/python
tcp        0      0 :::22            :::*             LISTEN  4586/sshd
# 除了可以列出監聽網絡的介面與狀態之外,最後一個欄還能夠顯示此服務的 PID 號碼以及程序的命令名稱喔!例如最後一行的 4586 就是該 PID

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章