Linux netstat命令詳解
一、netstat命令介紹
Netstat 命令用於顯示各種網路相關資訊,如網路連線,路由表,介面狀態 (Interface Statistics),masquerade 連線,多播成員 (Multicast Memberships) 等等。輸入netstat命令之後,會出現如下內容:
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED tcp296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 1 [ ] STREAM CONNECTED 16178 @000000dd unix 1 [ ] STREAM CONNECTED 16176 @000000dc unix 9 [ ] DGRAM 5292 /dev/log unix 1 [ ] STREAM CONNECTED 16182 @000000df ......
從整體上看,netstat命令的輸出結果可以分為兩個部分:一個是Active Internet connections,稱為有源TCP連線,其中"Recv-Q"和"Send-Q"指的是接收佇列和傳送佇列。這些數字一般都應該是0,如果不是0則表示軟體包正在佇列中堆積,這種情況只會在非常少的情況見到。另一個是Active UNIX domain sockets,稱為有源Unix域套介面(和網路套接字一樣,但是隻能用於本機通訊,效能可以提高一倍)。Proto表示連線使用的協議,RefCnt表示連線到該套介面上的程序號,Type表示套介面的型別,State表示套介面當前的狀態,Path表示連線到套介面的其它程序使用的路徑名。
二、netstat常用引數
netstat命令常用的選項引數如下表所示:
選項 | 功能 |
-a | (all)顯示所有選項,預設不顯示LISTEN相關 |
-t | (tcp)僅顯示tcp相關選項 |
-u | (udp)僅顯示udp相關選項 |
-n | 拒絕顯示別名,能顯示數字(IP)的全部轉化成數字(IP) |
-l | 僅列出有在 Listen (監聽) 的服務狀態 |
-p | 顯示建立相關連結的程式名 |
-r | 顯示路由資訊,路由表 |
-e | 顯示擴充套件資訊,例如uid等 |
-s | 按各個協議進行統計 |
提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到
三、netstat命令使用例項
【例1】列出所有埠(包括正在監聽和未監聽的)
[root@Gin scripts]# netstat -a | less -N 1 Active Internet connections (servers and established) 2 Proto Recv-Q Send-Q Local Address Foreign Address State 3 tcp 0 0 0.0.0.0:8223 0.0.0.0:* LISTEN 4 tcp 0 0 0.0.0.0:29503 0.0.0.0:* LISTEN 5 tcp 0 0 localhost:1988 0.0.0.0:* LISTEN 6 tcp 0 0 n227-080-096.byted:8648 0.0.0.0:* LISTEN 7 tcp 0 0 n227-080-096.byted:8649 0.0.0.0:* LISTEN 8 tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN 9 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 10 tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 11 tcp 0 1 n227-080-096.byte:42246 n12-058-225.byted.:3379 SYN_SENT 12 tcp 0 0 n227-080-096.byte:18484 n227-080-096.byted:2280 TIME_WAIT 13 tcp 0 0 n227-080-096.byte:18666 n227-080-096.byted:2280 TIME_WAIT 14 tcp 0 0 n227-080-096.byte:14324 n8-006-208.byted.o:http ESTABLISHED
......
less命令可以分頁顯示,-N引數可以列出行號
【例2】列出所有TCP埠
[root@Gin scripts]# netstat -at | less Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 96 Gin:ssh 192.168.17.1:60480 ESTABLISHED tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:mysql *:* LISTEN ......
如果需要列出所有UDP埠,則netstat -au
【例3】列出只在監聽的埠
[root@Gin scripts]# netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:mysql *:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 7132 @/com/ubuntu/upstart unix 2 [ ACC ] STREAM LISTENING 9569 /var/lib/mysql/mysql.sock ......
【例4】列出所有監聽TCP的埠
➜ test netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8223 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:29503 0.0.0.0:* LISTEN tcp 0 0 localhost:1988 0.0.0.0:* LISTEN tcp 0 0 n227-080-096.byted:8648 0.0.0.0:* LISTEN tcp 0 0 n227-080-096.byted:8649 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN ......
如果需要列出所有監聽UDP的埠,則:netstat -lu
【例5】在netstat的輸出中顯示 PID 和程序名稱
netstat -p 可以與其它開關一起使用,這樣可以新增 “PID/程序名稱” 到netstat的輸出中,這樣除錯的時候可以很方便的發現特定埠執行的程式。
# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox