一、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 tcp 296 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 | 拒絕顯示別名(不進行DNS解析),能顯示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
【例6】找出進程運行的端口
並不是所有的進程都能找到,沒有權限的會不顯示,使用 root 權限查看所有的信息。
# netstat -ap | grep ssh tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT - tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
【例7】找出運行在指定端口的進程
➜ test netstat -an|grep 80 tcp 0 0 10.227.80.96:8648 0.0.0.0:* LISTEN tcp 0 0 10.227.80.96:8649 0.0.0.0:* LISTEN tcp 0 0 10.227.80.96:34832 10.225.117.231:9370 ESTABLISHED tcp 0 0 10.227.80.96:35026 10.227.80.96:2280 TIME_WAIT tcp 0 0 10.227.80.96:16850 10.174.231.72:9427 TIME_WAIT tcp 0 0 127.0.0.1:30812 127.0.0.1:2280 ESTABLISHED tcp 0 0 10.227.80.96:43922 10.225.144.63:9436 ESTABLISHED tcp 0 0 10.227.80.96:100 10.154.16.17:4083 ESTABLISHED tcp 0 0 10.227.80.96:35160 10.227.80.96:2280 TIME_WAIT ......