Linux 監控命令之 netstat

netstat命令用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。netstat是在內核中訪問網絡及相關信息的程序,它能提供TCP連接,TCP和UDP監聽,進程內存管理的相關報告。

 

常用參數

  • -a (all)顯示所有選項,默認不顯示LISTEN相關
  • -t (tcp)僅顯示tcp相關選項
  • -u (udp)僅顯示udp相關選項
  • -n 拒絕顯示別名,直接使用ip地址,而不通過域名服務器。
  • -l 僅列出有在 Listen (監聽) 的服務狀態
  • -p 顯示建立相關鏈接的程序名
  • -r 顯示路由信息,路由表
  • -e 顯示擴展信息,例如uid等
  • -s 按各個協議進行統計
  • -c 每隔一個固定時間,執行該netstat命令。
  • 提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

命令展示

從整體上看,netstat的輸出結果可以分爲兩個部分:

  • 一個是Active Internet connections,稱爲有源TCP連接,其中"Recv-Q"和"Send-Q"指的是接收隊列和發送隊列。這些數字一般都應該是0。如果不是則表示軟件包正在隊列中堆積。這種情況只能在非常少的情況見到。
  • 另一個是Active UNIX domain sockets,稱爲有源Unix域套接口(和網絡套接字一樣,但是隻能用於本機通信,性能可以提高一倍)。
  1. Proto顯示連接使用的協議,
  2. RefCnt表示連接到本套接口上的進程號,
  3. Types顯示套接口的類型,
  4. State顯示套接口當前的狀態,
  5. Path表示連接到套接口的其它進程使用的路徑名。

套接口類型:

  • -t :TCP
  • -u :UDP
  • -raw :RAW類型
  • --unix :UNIX域類型
  • --ax25 :AX25類型
  • --ipx :ipx類型
  • --netrom :netrom類型

狀態說明:

  • LISTEN:偵聽來自遠方的TCP端口的連接請求
  • SYN-SENT:再發送連接請求後等待匹配的連接請求(如果有大量這樣的狀態包,檢查是否中招了)
  • SYN-RECEIVED:再收到和發送一個連接請求後等待對方對連接請求的確認(如有大量此狀態,估計被flood攻擊了)
  • ESTABLISHED:代表一個打開的連接
  • FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
  • FIN-WAIT-2:從遠程TCP等待連接中斷請求
  • CLOSE-WAIT:等待從本地用戶發來的連接中斷請求
  • CLOSING:等待遠程TCP對連接中斷的確認
  • LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認(不是什麼好東西,此項出現,檢查是否被攻擊)
  • TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
  • CLOSED:沒有任何連接狀態

實用命令實例

1. 列出所有端口 (包括監聽和未監聽的)

列出所有端口:     netstat -a
列出所有tcp端口:  netstat -at
列出所有udp端口:  netstat -au

2. 列出所有處於監聽狀態的 Sockets

只顯示監聽端口:          netstat -l
只列出所有監聽tcp端口:   netstat -lt
只列出所有監聽udp端口:   netstat -lu
只列出所有監聽UNIX端口:  netstat -lx

3. 顯示每個協議的統計信息

顯示所有端口的統計信息 netstat -s

顯示 TCP 或 UDP 端口的統計信息 netstat -st 或 -su

4. 顯示 PID 和進程名稱

netstat -p 可以與其它開關一起使用,就可以添加 “PID/進程名稱” 到 netstat 輸出中,這樣 debugging 的時候可以很方便的發現特定端口運行的程序。

5. 不顯示主機,端口和用戶名 (host, port or user)

當你不想讓主機,端口和用戶名顯示,使用 netstat -n。將會使用數字代替那些名稱。該參數可以加速output的輸出,因爲不用進行比對查詢。

6. 持續輸出 netstat 信息

netstat 將每隔一秒輸出網絡信息。 netstat -t -c 2

7. 顯示系統不支持的地址族 (Address Families)

netstat --verbose

8. 顯示核心路由信息

netstat -rn # 注意: 使用 netstat -rn 顯示數字格式,不查詢主機名稱,效果等價於route -n

9. 找出程序運行的端口

並不是所有的進程都能找到,沒有權限的會不顯示,使用 root 權限查看所有的信息。

[root@centos6 ~]# netstat -apn | grep ssh

找出運行在指定端口的進程

[root@centos6 ~]# netstat -an | grep ':22'

10. 顯示網絡接口列表

[root@centos6 ~]# netstat -i
[root@centos6 ~]# netstat -ie
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章