Command netstat - cruisechang/wiki-linux GitHub Wiki

netstat

指令

[root@linux ~]# netstat -[rn] <==與路由有關的參數

[root@linux ~]# netstat -[antulpc] <==與網路介面有關的參數

參數:

與路由 (route) 有關的參數說明:

-r :列出路由表(route table),功能如同 route 這個指令;

-n :不使用主機名稱與服務名稱,使用 IP 與 port number ,如同 route -n

與網路介面有關的參數:

-a :列出所有的連線狀態,包括 tcp/udp/unix socket 等

-t :僅列出 TCP 封包的連線

-u :僅列出 UDP 封包的連線

-l :僅列出有在 Listen (監聽) 的服務之網路狀態

-p :列出 PID 與 Program 的檔名

-c :可以設定幾秒鐘後自動更新一次,例如 -c 5 每五秒更新一次網路狀態的顯示

範例一:列出目前的路由表狀態,且以 IP 及 port number 顯示:

[root@linux ~]# netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.10.30   0.0.0.0         UG        0 0          0 eth0

範例二:列出目前的所有網路連線狀態,使用 IP 與 port number

[root@linux ~]# netstat -an

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 ::ffff:192.168.10.100:25    ::ffff:192.168.10.200:57509 TIME_WAIT
tcp        0     52 ::ffff:192.168.10.100:22    ::ffff:192.168.10.210:1504  ESTABLISHED
udp        0      0 127.0.0.1:53                0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     4792   public/cleanup
unix  2      [ ACC ]     STREAM     LISTENING     4799   private/rewrite

netstat 的輸出主要分為兩大部分,分別是 TCP/IP 的網路介面部分,以及傳統的 Unix socket 部分。

網路連線狀態的輸出部分:

* Proto:該連線的封包協定,主要為 TCP/UDP 等封包

* Recv-Q:非由使用者程式連接所複製而來的總 bytes 數

* Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數

* Local Address:本地端的位址,可以是 IP (-n 參數存在時),也可以是完整的主機名稱。
  IP 格式有兩種,一種是 IPv4 的標準, 亦即是四組十進位的數字後面加上冒號『:』後,接著 port number。
  一種是 IPv6,前面的 IP 加上很多冒號『:』的格式。
  我們可以由這個顯示的資料看出這個服務是開放在哪一個介面,例如上表當中,port 22 是開放在 0.0.0.0,
  亦即是所有介面都可以連到 port 22,至於 port 53 則僅開放在本機的 127.0.0.1 這個介面而已,所以是不對外部介面開放的意思。

* Foreign Address:遠端的主機 IP 與 port number

* state:狀態列,主要的狀態含有:
  o ESTABLISED:已建立連線的狀態;
  o SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
  o SYN_RECV:接收到一個要求連線的主動連線封包;
  o FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
  o FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
  o TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
  o LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。

範例三:列出本機啟動的網路服務(列出listen的程式及port)

[root@linux ~]# netstat -tulnp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State    PID/Program name
tcp        0      0 0.0.0.0:25      0.0.0.0:*        LISTEN   2141/master
tcp        0      0 :::22           :::*             LISTEN   1924/sshd
tcp        0      0 :::25           :::*             LISTEN   2141/master
udp        0      0 127.0.0.1:53    0.0.0.0:*                 1911/named
//最重要 -l 參數,可以僅列出有在 Listen 的 port

說明:

對外開放-port 25/22,針對 0.0.0.0 開放,tcp,PID 2141/program sshd

內部開放-port 53,針對內部的 127.0.0.1,udp

範例四:列出本機所有的網路連線狀態

[root@linux ~]# netstat -atunp

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address     State       PID/Program name
tcp        0      0 0.0.0.0:25        0.0.0.0:*           LISTEN      2141/master
tcp        0      0 :::22             :::*                LISTEN      1924/sshd
tcp        0      0 :::25             :::*                LISTEN      2141/master
tcp        0     68 192.168.1.100:22  192.168.1.210:1504  ESTABLISHED 30417/sshd:
udp        0      0 127.0.0.1:53      0.0.0.0:*                       1911/named

說明:

Established-遠端主機 192.168.1.210 啟動一個大於 1024 的埠口向本地端主機 192.168.1.100 的 port 22 進行連線

  • Client 端是隨機取一個大於 1024 以上的 port 進行連線
  • 只有 root 可以啟動小於 1023 以下的 port

範例:查看80 port連線數

    netstat -nat|grep -i "80"|wc -l

範例:查看Apache的併發請求數及其TCP連接狀態

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    返回結果示例:
   LAST_ACK 5
   SYN_RECV 30       //表示正在等待處理的請求數
   ESTABLISHED 1597  //表示正常數據傳輸狀態
   FIN_WAIT1 51
   FIN_WAIT2 504
   TIME_WAIT 1057    //表示處理完畢,等待超時結束的請求數

服務名稱與 port number 的對應 /etc/services