Linux技術——netstat命令詳解
簡介:
Netstat 是一款命令列工具,可用於列出系統上所有的網路套接字連線情況,包括 tcp, udp 以及 unix 套接字,另外它還能列出處於監聽狀態(即等待接入請求)的套接字。
netstat - 列印網路連線、路由表、連線的資料統計、偽裝連線以及廣播域成員。
常見引數:
-a (all)顯示所有選項,預設不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示建立相關連結的程式名
-r 顯示路由資訊,路由表
-e 顯示擴充套件資訊,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令。
1、列出所有的連線
netstat -a
-a選項會列出tcp,udp和unix協議下所有套接字的連線。但是我們一般只是想查詢某個協議或某個埠的具體連線情況。
-a選項會列出tcp,udp和unix協議下所有套接字的連線。但是我們一般只是想查詢某個協議或某個埠的具體連線情況。
2、只列出TCP或UDP協議的連線
用-t選項列出TCP協議的連線
root@linux_ever:~# netstat -at
啟用Internet連線 (伺服器和已建立連線的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 yxk:domain *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 localhost:mysql *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
tcp6 0 0 [::]:3128 [::]:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
用-u選項列出UDP協議的連線
root@linux_ever:~# netstat -au
啟用Internet連線 (伺服器和已建立連線的)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:ipp *:*
udp 0 0 *:mdns *:*
udp 0 0 *:46678 *:*
udp 0 0 *:51196 *:*
udp 0 0 yxk:domain *:*
udp 0 0 *:bootpc *:*
udp 0 0 *:59784 *:*
udp6 0 0 [::]:49703 [::]:*
udp6 0 0 [::]:56256 [::]:*
udp6 0 0 ip6-localhost:56355 ip6-localhost:42658 ESTABLISHED
udp6 0 0 [::]:mdns [::]:*
udp6 0 0 ip6-localhost:42658 ip6-localhost:56355 ESTABLISHED
udp6 0 0 [::]:36927 [::]:*
3. 禁用反向域名解析,加快查詢速度
預設情況下 netstat 會通過反向域名解析技術查詢每個 IP 地址對應的主機名。這會降低查詢速度。如果你覺得 IP 地址已經足夠,而沒有必要知道主機名,就使用 -n 選項禁用域名解析功能。root@linux_ever:~# netstat -ant
啟用Internet連線 (伺服器和已建立連線的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN
tcp 0 0 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::3128 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 1 0 ::1:53757 ::1:631 CLOSE_WAIT
tcp6 1 0 ::1:53820 ::1:631 CLOSE_WAIT
tcp 0 0 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED 是用ssh協議登入到主機的,所以可以看到這是建立的一條tcp連線。
4. 只列出監聽中的連線
任何網路服務的後臺程式都會開啟一個埠,用於監聽接入的請求。這些正在監聽的套接字也和連線的套接字一樣,也能被 netstat 列出來。使用 -l 選項列出正在監聽的套接字。root@linux_ever:~# netstat -tnl
啟用Internet連線 (僅伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::3128 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
現在我們可以看到處於監聽狀態的 TCP 埠和連線。如果你檢視所有監聽埠,去掉 -t 選項。如果你只想檢視 UDP 埠,使用 -u 選項,代替 -t 選項。
root@linux_ever:~# netstat -unl
啟用Internet連線 (僅伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:631 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:46678 0.0.0.0:*
udp 0 0 0.0.0.0:51196 0.0.0.0:*
udp 0 0 127.0.1.1:53 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:59784 0.0.0.0:*
udp6 0 0 :::49703 :::*
udp6 0 0 :::56256 :::*
udp6 0 0 :::5353 :::*
udp6 0 0 :::36927 :::*
5. 獲取程式名、程式號以及使用者ID
檢視埠和連線的資訊時,能檢視到它們對應的程式名和程式號對系統管理員來說是非常有幫助的。舉個例子,Apache 的 httpd 服務開啟80埠,如果你要檢視 http 服務是否已經啟動,或者 http 服務是由 apache 還是 nginx 啟動的,這時候你可以看看程式名。使用 -p 選項檢視程式資訊。
root@linux_ever:~# netstat -tnlp
啟用Internet連線 (僅伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1112/dnsmasq
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 826/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 813/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3517/cupsd
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 815/xinetd
tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN 815/xinetd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 933/mysqld
tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN 815/xinetd
tcp6 0 0 :::22 :::* LISTEN 813/sshd
tcp6 0 0 ::1:631 :::* LISTEN 3517/cupsd
tcp6 0 0 :::3128 :::* LISTEN 945/squid3
tcp6 0 0 :::80 :::* LISTEN 1158/apache2
使用 -p 選項時,netstat 必須執行在 root 許可權之下,不然它就不能得到執行在 root 許可權下的程式名,而很多服務包括 http 和 ftp 都執行在 root 許可權之下。相比程式名和程式號而言,檢視程式的擁有者會更有用。使用 -ep 選項可以同時檢視程式名和使用者名稱。
root@linux_ever:~# netstat -ltep
啟用Internet連線 (僅伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 yxk:domain *:* LISTEN root 10511 1112/dnsmasq
tcp 0 0 *:ftp *:* LISTEN root 8890 826/vsftpd
tcp 0 0 *:ssh *:* LISTEN root 9398 813/sshd
tcp 0 0 localhost:ipp *:* LISTEN root 19363 3517/cupsd
tcp 0 0 *:telnet *:* LISTEN root 9559 815/xinetd
tcp 0 0 *:echo *:* LISTEN root 9558 815/xinetd
tcp 0 0 localhost:mysql *:* LISTEN mysql 10645 933/mysqld
tcp 0 0 *:daytime *:* LISTEN root 9557 815/xinetd
tcp6 0 0 [::]:ssh [::]:* LISTEN root 9400 813/sshd
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 19362 3517/cupsd
tcp6 0 0 [::]:3128 [::]:* LISTEN root 200066 945/squid3
tcp6 0 0 [::]:http [::]:* LISTEN root 10582 1158/apache2
上面列出 TCP 協議下的監聽套接字,同時顯示程式資訊和一些額外資訊。這些額外的資訊包括使用者名稱和程式的索引節點號。這個命令對網管來說很有用。
6. 列印統計資料
netstat 可以列印出網路統計資料,包括某個協議下的收發包數量。選項是-s下面列出所有網路包的統計情況:
root@linux_ever:~# netstat -s
Ip:
共計收到421162個資料包
0 已轉發
0 incoming packets discarded
419945 incoming packets delivered
245868請求已發出
436 發出的報被拋棄
127 被拋棄,因為沒有路由
Icmp:
6202 ICMP messages received
18 input ICMP message failed.
InCsumErrors: 18
ICMP接收歷史
目的地址不可達:6117
echo requests: 36
echo replies: 31
6296 ICMP messages sent
0 ICMP messages failed
ICMP發出歷史
目的地址不可達:6229
echo request: 31
echo replies: 36
比如:
root@linux_ever:~# netstat -su
IcmpMsg:
InType0: 31
InType3: 6117
InType8: 36
OutType0: 36
OutType3: 6229
OutType8: 31
Udp:
22928 packets received
6226 packets to unknown port received.
0 packet receive errors
24063 packets sent
UdpLite:
IpExt:
InNoRoutes: 107
InMcastPkts: 17763
OutMcastPkts: 1007
InBcastPkts: 181400
InOctets: 87091549
OutOctets: 93256156
InMcastOctets: 1948386
OutMcastOctets: 129620
InBcastOctets: 15828501
InNoECTPkts: 443329
7. 顯示核心路由資訊
使用 -r 選項列印核心路由資訊。列印出來的資訊與 route 命令輸出的資訊一樣。我們也可以使用 -n 選項禁止域名解析。root@linux_ever:~# netstat -rn
核心 IP 路由表
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8. 列印網路介面
netstat 也能列印網路介面資訊,-i 選項就是為這個功能而生。root@linux_ever:~# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 434501 0 0 0 222915 0 0 0 BMRU
lo 65536 0 36530 0 0 0 36530 0 0 0 LRU
上面輸出的資訊比較原始。我們將 -e 選項和 -i 選項搭配使用,可以輸出使用者友好的資訊。並且和ifconfig命令輸出的結果是一樣的。root@linux_ever:~# netstat -ie
Kernel Interface table
eth0 Link encap:乙太網 硬體地址 08:00:27:23:9c:b4
inet 地址:192.168.56.101 廣播:192.168.56.255 掩碼:255.255.255.0
inet6 地址: fe80::a00:27ff:fe23:9cb4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1
接收資料包:434595 錯誤:0 丟棄:0 過載:0 幀數:0
傳送資料包:222934 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 傳送佇列長度:1000
接收位元組:93754320 (93.7 MB) 傳送位元組:95995756 (95.9 MB)
lo Link encap:本地環回
inet 地址:127.0.0.1 掩碼:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 躍點數:1
接收資料包:36536 錯誤:0 丟棄:0 過載:0 幀數:0
傳送資料包:36536 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 傳送佇列長度:0
接收位元組:2911517 (2.9 MB) 傳送位元組:2911517 (2.9 MB)
9. netstat 持續輸出
我們可以使用 netstat 的 -c 選項持續輸出資訊。比如 netstat -ct 這個命令可持續輸出 TCP 協議資訊。會持續輸出下面的內容。
root@linux_ever:~# netstat -ct
啟用Internet連線 (w/o 伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
啟用Internet連線 (w/o 伺服器)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
10. 顯示多播組資訊
選項 -g 會輸出 IPv4 和 IPv6 的多播組資訊。
root@linux_ever:~# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 224.0.0.1
eth0 1 224.0.0.251
eth0 1 224.0.0.1
lo 1 ip6-allnodes
getnameinfo failed
lo 1 [未知]
getnameinfo failed
eth0 1 [未知]
getnameinfo failed
eth0 1 [未知]
eth0 1 ip6-allnodes
getnameinfo failed
eth0 1 [未知]
11、列印 active 狀態的連線
active 狀態的套接字連線用 "ESTABLISHED" 欄位表示,所以我們可以使用 grep 命令獲得 active 狀態的連線:root@linux_ever:~# netstat -atnp | grep ESTA
tcp 0 52 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED 10964/1
$ watch -d -n0 "netstat -atnp | grep ESTA"
12、檢視服務是否在執行
如果你想看看 http,smtp 或 ntp 服務是否在執行,使用 grep。root@linux_ever:~# netstat -aple | grep http
tcp6 0 0 [::]:http [::]:* LISTEN root 10582 1158/apache2
從這裡可以看到 http 服務正在執行。參考文章:
相關文章
- Linux netstat命令詳解Linux
- Linux netstat 命令詳解Linux
- netstat命令詳解
- netstat 命令詳解
- Linux netstat 命令常用選項詳解Linux
- Linux技術——lsof命令詳解Linux
- Linux技術——tcpdump命令詳解LinuxTCP
- 轉載Linux Netstat 命令詳細解釋Linux
- Linux netstat詳解Linux
- Linux下 netstat ps kill 命令詳解及常用命令收集Linux
- Linux - netstat命令Linux
- Linux之netstat命令Linux
- Linux netstat命令結果分析Linux
- 每天一個 Linux 命令(56): netstat 命令Linux
- Linux at命令詳解Linux
- netstat命令
- LINUX 網路監控命令(netstat)Linux
- Linux技術——常用 linux 命令Linux
- JNI技術詳解
- Linux xargs 命令詳解Linux
- Linux sed 命令詳解Linux
- Linux awk 命令詳解Linux
- linux top 命令詳解Linux
- Linux diff命令詳解Linux
- Linux chattr命令詳解Linux
- Linux命令top詳解Linux
- Linux screen 命令詳解Linux
- Linux find 命令詳解Linux
- linux top命令詳解Linux
- linux命令詳解:sortLinux
- 【Linux】tcpdump命令詳解LinuxTCP
- linux tail 命令詳解LinuxAI
- Linux more命令詳解Linux
- linux grep命令詳解Linux
- Linux free命令詳解Linux
- Linux PS命令詳解Linux
- Linux date命令詳解Linux
- Linux scp命令詳解Linux