一、netstat命令簡述
netstat命令用來打印Linux系統的網絡狀態信息,包括網絡連接(network connections)、路由表(routing tables)、網絡接口設備統計信息(interface statistics)、偽裝連接(masquerade connections)和多播成員信息(multicast memberships)等,可顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。。
二、輸出解釋
在linux下直接執行netstat會得到如下結果

從整體上看netstat的輸出結果可以分為兩個部分。一個是Active Internet connections,二是Active UNIX domain sockets。
(1)Active Internet connections Active Internet connections表示活躍的網絡連接,包括UDP和TCP連接信息。其中"Recv-Q"和"Send-Q"指接收隊列和發送隊列,這些數字一般都是0,如果不是則表示數據發送和接收隊列存在堆積,這種情況較為少見。Local Address和Foreign Address表示本地和遠端的IP、端口,State表示連接的狀態,主要有:
ESTABLISHED:已建立連接的狀態
LISTEN :偵聽來自遠方的TCP端口的連接請求
SYN_SENT:發出主動連接(SYN)的數據包
SYN_RECV :接收到一個要求連接的主動連接數據包
FIN_WAIT1 :該套接字服務已中斷,該連接正在斷線中
FIN_WAIT2:該連接已掛斷,正在等待對方主機響應斷線確認的數據包
TIME_WAIT :連接已掛斷,但socket還在網絡上等待結束
CLOSE_WAIT:等待從本地用戶發來的連接中斷請求
為了方便理解上述狀態具體內容,畫出客戶端向服務器請求TCP連接的三次握手和客戶端主動斷開連接的四次揮手過程示意圖如下:
三次握手:

四次揮手:

(2)Active UNIX domain sockets Active UNIX domain sockets,稱為活躍Unix域套接字。
Proto顯示連接使用的協議; RefCnt表示使用數量,即通過此套接字連接的進程數;
Flags顯示的標志為SO_ACCEPTON(顯示為 ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果相應的進程等待一個連接請求,那么SO_ACCECPTON用於未連接的套接字。其它標志通常並不重要。
Types顯示套接口的類型,一般為DGRAM(數據報)、STREAM(數據流);
I-Node表示套接字的Inode節點號;
Path表示套接字所在路徑。
State顯示套接字當前的狀態,此字段包含以下關鍵字之一:
FREE:套接字未分配。
LISTENING:套接字正在監聽一個連接請求。除非設置 --listening (-l) 或者 --all (-a) 選項,否則不顯示。
CONNECTING:套接字正要建立連接
CONNECTED:套接字已連接
DISCONNECTING:套接字已斷開
(empty):套接字未連
三、常用netstat相關命令
命令格式:
netstat[<options>]
語法選項:
-a或--all:顯示所有連線中的Socket; -A<網絡類型>或--<網絡類型>:列出該網絡類型連線中的相關地址; -c或--continuous:持續列出網絡狀態; -C或--cache:顯示路由器配置的快取信息; -e或--extend:顯示網絡其他相關信息; -F或--fib:顯示FIB; -g或--groups:顯示多重廣播功能群組組員名單; -h或--help:在線幫助; -i或--interfaces:顯示網絡界面信息表單; -l或--listening:顯示監控中的服務器的Socket; -M或--masquerade:顯示偽裝的網絡連線; -n或--numeric:直接使用ip地址,而不通過域名服務器; -N或--netlink或--symbolic:顯示網絡硬件外圍設備的符號連接名稱; -o或--timers:顯示計時器; -p或--programs:顯示正在使用Socket的程序識別碼和程序名稱; -r或--route:顯示Routing Table; -s或--statistice:顯示網絡工作信息統計表; -t或--tcp:顯示TCP傳輸協議的連線狀況; -u或--udp:顯示UDP傳輸協議的連線狀況; -v或--verbose:顯示指令執行過程; -V或--version:顯示版本信息; -w或--raw:顯示RAW傳輸協議的連線狀況; -x或--unix:此參數的效果和指定"-A unix"參數相同; --ip或--inet:此參數的效果和指定"-A inet"參數相同。
netstat -ntlp //查看當前所有tcp端口
netstat -ntulp |grep 80 //查看所有80端口使用情況
netstat -an | grep 3306 //查看所有3306端口使用情況
netstat -lanp //查看一台服務器上面哪些服務及端口
ps -ef |grep mysqld //查看一個服務有幾個端口。比如要查看mysqld
netstat -pnt |grep :3306 |wc //查看某一端口的連接數量,比如3306端口
netstat -anp |grep 3306 //查看某一端口的連接客戶端IP 比如3306端口
常用的命令如下圖:

四、常用命令示例
1.列出所有端口信息(包括監聽和未監聽的)
netstat -a
顯示信息:
hadoop@master:~$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN udp 0 0 localhost:domain 0.0.0.0:* udp 0 0 0.0.0.0:45465 0.0.0.0:* udp 0 0 0.0.0.0:ipp 0.0.0.0:* udp 0 0 0.0.0.0:mdns 0.0.0.0:* udp6 0 0 [::]:56383 [::]:* udp6 0 0 [::]:mdns [::]:* raw6 0 0 [::]:ipv6-icmp [::]:* 7 Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 40098 @/tmp/.ICE-unix/2304 unix 2 [ ] DGRAM 37416 /run/user/1001/systemd/notify
2.列出所有的tcp協議的端口
netstat -at
顯示信息:
hadoop@master:~$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp 0 1 master:55660 36.75.98.34.bc.go:https SYN_SENT tcp 0 0 master:45170 server-13-32-52-1:https ESTABLISHED tcp 0 1 master:55662 36.75.98.34.bc.go:https SYN_SENT tcp 0 0 master:55696 ec2-52-24-186-236:https ESTABLISHED tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
3.顯示每個協議的統計信息
netstat -s
顯示信息:
hadoop@master:~$ netstat -s Ip: Forwarding: 2 2700 total packets received 63 with invalid addresses 0 forwarded 0 incoming packets discarded 2635 incoming packets delivered 2445 requests sent out 20 outgoing packets dropped Icmp: 43 ICMP messages received 0 input ICMP message failed ICMP input histogram: destination unreachable: 43 51 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 51 IcmpMsg: InType3: 43 OutType3: 51
4.顯示核心路由信息
netstat -r
顯示信息:
hadoop@master:~$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default _gateway 0.0.0.0 UG 0 0 0 ens33 192.168.81.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
5.持續輸出 netstat 信息。netstat -c將每隔一秒輸出網絡信息
netstat -c
6. 找出程序運行的端口。並不是所有的進程都能找到,沒有權限的會不顯示,使用 root 權限查看所有的信息
root@master:/home/hadoop# netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 964/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1149/cupsd
7. 顯示多播組信息
netstat -g
顯示信息:
root@master:/home/hadoop# netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 224.0.0.251 lo 1 all-systems.mcast.net ens33 1 224.0.0.251 ens33 1 all-systems.mcast.net lo 1 ff02::fb lo 1 ip6-allnodes lo 1 ff01::1 ens33 1 ff02::fb ens33 1 ff02::1:ffae:db63 ens33 2 ip6-allnodes ens33 1 ff01::1
8.顯示接口信息
netstat -i
顯示:
root@master:/home/hadoop# netstat -i Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens33 1500 3856 0 0 0 2715 0 0 0 BMRU lo 65536 766 0 0 0 766 0 0 0 LRU
9.禁止域名解析
正常情況輸出結果:
root@master:/home/hadoop# netstat -ltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:domain 0.0.0.0:* LISTEN 964/systemd-resolve tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 1640/sshd tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 1149/cupsd tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN 1704/mysqld tcp6 0 0 [::]:ssh [::]:* LISTEN 1640/sshd
禁止域名解析后輸出結果:
root@master:/home/hadoop# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 964/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1149/cupsd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
我們發現在local address 即主機地址這一欄中,如果沒有帶n選項,會將套接字所對應的域名解析出來,如果加上n選項,那么就不會顯示,即禁止域名解析的功能,這樣做有助於提高查詢速度,因為減少了對主機域名的查詢。
netstat的大部分功能都介紹了,如果想知道netstat更高級的功能,請閱讀它的手冊~
