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 //表示處理完畢,等待超時結束的請求數