1. 程式人生 > 其它 >大資料開發Linux系統入門之netstat 命令學習

大資料開發Linux系統入門之netstat 命令學習

netstat 命令用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計資料,一般用於檢驗本機各埠的網路連線情況。netstat 是在核心中訪問網路及相關資訊的程式,​大資料培訓​它能提供 TCP 連線,TCP 和 UDP 監聽,程序記憶體管理的相關報告。

如果你的計算機有時候接收到的資料報導致出錯資料或故障,你不必感到奇怪,TCP/IP 可以容許這些型別的錯誤,並能夠自動重發資料報。但如果累計的出錯情況數目佔到所接收的 IP 資料報相當大的百分比,或者它的數目正迅速增加,那麼你就應該使用 netstat 查一查為什麼會出現這些情況了。

1.命令格式:

netstat [-acCeFghilMnNoprstuvVwx][-A<網路型別>][--ip]

2.命令功能:

netstat 用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計資料,一般用於檢驗本機各埠的網路連線情況。

3.命令引數:

-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”引數相同。

4.使用例項:

例項 1:無引數使用

命令:

netstat

輸出:

[root@localhost ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 268 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED
udp 0 0 192.168.120.204:4371 10.58.119.119:domain ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd
unix 4 [ ] DGRAM 7337 /dev/log
unix 2 [ ] DGRAM 708823
unix 2 [ ] DGRAM 7539
unix 3 [ ] STREAM CONNECTED 7287
unix 3 [ ] STREAM CONNECTED 7286
[root@localhost ~]#

說明:

從整體上看,netstat 的輸出結果可以分為兩個部分:

一個是 Active Internet connections,稱為有源 TCP 連線,其中"Recv-Q"和"Send-Q"指的是接收佇列和傳送佇列。這些數字一般都應該是 0。如果不是則表示軟體包正在佇列中堆積。這種情況只能在非常少的情況見到。

另一個是 Active UNIX domain sockets,稱為有源 Unix 域套介面(和網路套接字一樣,但是隻能用於本機通訊,效能可以提高一倍)。

Proto 顯示連線使用的協議,RefCnt 表示連線到本套介面上的程序號,Types 顯示套介面的型別,State 顯示套介面當前的狀態,Path 表示連線到套介面的其它程序使用的路徑名。

套介面型別:

-t :TCP

-u :UDP

-raw :RAW 型別

--unix :UNIX 域型別

--ax25 :AX25 型別

--ipx :ipx 型別

--netrom :netrom 型別

狀態說明:

LISTEN:偵聽來自遠方的 TCP 埠的連線請求

SYN-SENT:再發送連線請求後等待匹配的連線請求(如果有大量這樣的狀態包,檢查是否中招了)

SYN-RECEIVED:再收到和傳送一個連線請求後等待對方對連線請求的確認(如有大量此狀態,估計被 flood 攻擊了)

ESTABLISHED:代表一個開啟的連線

FIN-WAIT-1:等待遠端 TCP 連線中斷請求,或先前的連線中斷請求的確認

FIN-WAIT-2:從遠端 TCP 等待連線中斷請求

CLOSE-WAIT:等待從本地使用者發來的連線中斷請求

CLOSING:等待遠端 TCP 對連線中斷的確認

LAST-ACK:等待原來的發向遠端 TCP 的連線中斷請求的確認(不是什麼好東西,此項出現,檢查是否被攻擊)

TIME-WAIT:等待足夠的時間以確保遠端 TCP 接收到連線中斷請求的確認

CLOSED:沒有任何連線狀態

例項 2:列出所有埠

命令:

netstat -a

輸出:

[root@localhost ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:smux *:* LISTEN
tcp 0 0 *:svn *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 284 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED
udp 0 0 localhost:syslog *:*
udp 0 0 *:snmp *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 708833 /tmp/ssh-yKnDB15725/agent.15725
unix 2 [ ACC ] STREAM LISTENING 7296 /var/run/audispd_events
unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd
unix 4 [ ] DGRAM 7337 /dev/log
unix 2 [ ] DGRAM 708823
unix 2 [ ] DGRAM 7539
unix 3 [ ] STREAM CONNECTED 7287
unix 3 [ ] STREAM CONNECTED 7286
[root@localhost ~]#

說明:

顯示一個所有的有效連線資訊列表,包括已建立的連線(ESTABLISHED),也包括監聽連線請(LISTENING)的那些連線。

例項 3:顯示當前 UDP 連線狀況

命令:

netstat -nu

輸出:

[root@andy ~]# netstat -nu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 ::ffff:192.168.12:53392 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:56723 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:56480 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:58154 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:44227 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:36954 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:53984 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:57703 ::ffff:192.168.9.120:10000 ESTABLISHED
udp 0 0 ::ffff:192.168.12:53613 ::ffff:192.168.9.120:10000 ESTABLISHED
[root@andy ~]#

說明:

例項 4:顯示 UDP 埠號的使用情況

命令:

netstat -apu

輸出:

[root@andy ~]# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:57604 *:* 28094/java
udp 0 0 *:40583 *:* 21220/java
udp 0 0 *:45451 *:* 14583/java
udp 0 0 ::ffff:192.168.12:53392 ::ffff:192.168.9.120:ndmp ESTABLISHED 19327/java
udp 0 0 *:52370 *:* 15841/java
udp 0 0 ::ffff:192.168.12:56723 ::ffff:192.168.9.120:ndmp ESTABLISHED 15841/java
udp 0 0 *:44182 *:* 31757/java
udp 0 0 *:48155 *:* 5476/java
udp 0 0 *:59808 *:* 17333/java
udp 0 0 ::ffff:192.168.12:56480 ::ffff:192.168.9.120:ndmp ESTABLISHED 28094/java
udp 0 0 ::ffff:192.168.12:58154 ::ffff:192.168.9.120:ndmp ESTABLISHED 15429/java
udp 0 0 *:36780 *:* 10091/java
udp 0 0 *:36795 *:* 24594/java
udp 0 0 *:41922 *:* 20506/java
udp 0 0 ::ffff:192.168.12:44227 ::ffff:192.168.9.120:ndmp ESTABLISHED 17333/java
udp 0 0 *:34258 *:* 8866/java
udp 0 0 *:55508 *:* 11667/java
udp 0 0 *:36055 *:* 12425/java
udp 0 0 ::ffff:192.168.12:36954 ::ffff:192.168.9.120:ndmp ESTABLISHED 16532/java
udp 0 0 ::ffff:192.168.12:53984 ::ffff:192.168.9.120:ndmp ESTABLISHED 20506/java
udp 0 0 ::ffff:192.168.12:57703 ::ffff:192.168.9.120:ndmp ESTABLISHED 31757/java
udp 0 0 ::ffff:192.168.12:53613 ::ffff:192.168.9.120:ndmp ESTABLISHED 3199/java
udp 0 0 *:56309 *:* 15429/java
udp 0 0 *:54007 *:* 16532/java
udp 0 0 *:39544 *:* 3199/java
udp 0 0 *:43900 *:* 19327/java
[root@andy ~]#

說明:

例項 5:顯示網絡卡列表

命令:

netstat -i

輸出:

[root@andy ~]# 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 151818887 0 0 0 198928403 0 0 0 BMRU
lo 16436 0 107235 0 0 0 107235 0 0 0 LRU
[root@andy ~]#

說明:

例項 6:顯示組播組的關係

命令:

netstat -g

輸出:

[root@andy ~]# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eth0 1 all-systems.mcast.net
lo 1 ff02::1
eth0 1 ff02::1:ffff:9b0c
eth0 1 ff02::1
[root@andy ~]#

說明:

例項 7:顯示網路統計資訊

命令:

netstat -s

輸出:

[root@localhost ~]# netstat -s
Ip:
530999 total packets received
0 forwarded
0 incoming packets discarded
530999 incoming packets delivered
8258 requests sent out
1 dropped because of missing route
Icmp:
90 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
destination unreachable: 17
echo requests: 1
echo replies: 72
106 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 8
echo request: 97
echo replies: 1
IcmpMsg:
InType0: 72
InType3: 17
InType8: 1
OutType0: 1
OutType3: 8
OutType8: 97
Tcp:
8 active connections openings
15 passive connection openings
8 failed connection attempts
3 connection resets received
1 connections established
3132 segments received
2617 segments send out
53 segments retransmited
0 bad segments received.
252 resets sent
Udp:
0 packets received
0 packets to unknown port received.
0 packet receive errors
5482 packets sent
TcpExt:
1 invalid SYN cookies received
1 TCP sockets finished time wait in fast timer
57 delayed acks sent
Quick ack mode was activated 50 times
60 packets directly queued to recvmsg prequeue.
68 packets directly received from backlog
4399 packets directly received from prequeue
520 packets header predicted
51 packets header predicted and directly queued to user
1194 acknowledgments not containing data received
21 predicted acknowledgments
0 TCP data loss events
1 timeouts after reno fast retransmit
9 retransmits in slow start
42 other TCP timeouts
3 connections aborted due to timeout
IpExt:
InBcastPkts: 527777

說明:

按照各個協議分別顯示其統計資料。如果我們的應用程式(如 Web 瀏覽器)執行速度比較慢,或者不能顯示 Web 頁之類的資料,那麼我們就可以用本選項來檢視一下所顯示的資訊。我們需要仔細檢視統計資料的各行,找到出錯的關鍵字,進而確定問題所在。

例項 8:顯示監聽的套介面

命令:

netstat -l

輸出:

[root@localhost ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:smux *:* LISTEN
tcp 0 0 *:svn *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
udp 0 0 localhost:syslog *:*
udp 0 0 *:snmp *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 708833 /tmp/ssh-yKnDB15725/agent.15725
unix 2 [ ACC ] STREAM LISTENING 7296 /var/run/audispd_events
[root@localhost ~]#

說明:

例項 9:顯示所有已建立的有效連線

命令:

netstat -n

輸出:

[root@localhost ~]# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 268 192.168.120.204:22 10.2.0.68:62420 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd
unix 4 [ ] DGRAM 7337 /dev/log
unix 2 [ ] DGRAM 708823
unix 2 [ ] DGRAM 7539
unix 3 [ ] STREAM CONNECTED 7287
unix 3 [ ] STREAM CONNECTED 7286
[root@localhost ~]#

說明:

例項 10:顯示關於乙太網的統計資料

命令:

netstat -e

輸出:

[root@localhost ~]# netstat -e
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode
tcp 0 248 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED root 708795
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd
unix 4 [ ] DGRAM 7337 /dev/log
unix 2 [ ] DGRAM 708823
unix 2 [ ] DGRAM 7539
unix 3 [ ] STREAM CONNECTED 7287
unix 3 [ ] STREAM CONNECTED 7286
[root@localhost ~]#

說明:

用於顯示關於乙太網的統計資料。它列出的專案包括傳送的資料報的總位元組數、錯誤數、刪除數、資料報的數量和廣播的數量。這些統計資料既有傳送的資料報數量,也有接收的資料報數量。這個選項可以用來統計一些基本的網路流量)

例項 11:顯示關於路由表的資訊

命令:

netstat -r

輸出:

[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.120.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth0
10.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0
default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0
[root@localhost ~]#

說明:

例項 12:列出所有 tcp 埠

命令:

netstat -at

輸出:

[root@localhost ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:smux *:* LISTEN
tcp 0 0 *:svn *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 284 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED
[root@localhost ~]#

說明:

例項 13:統計機器中網路連線各個狀態個數

命令:

netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

輸出:

[root@localhost ~]# netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1
LISTEN 3
[root@localhost ~]#

說明:

例項 14:把狀態全都取出來後使用 uniq -c 統計後再進行排序

命令:

netstat -nat |awk '{print $6}'|sort|uniq -c

輸出:

[root@andy ~]# netstat -nat |awk '{print $6}'|sort|uniq -c
14 CLOSE_WAIT
1 established)
578 ESTABLISHED
1 Foreign
43 LISTEN
5 TIME_WAIT
[root@andy ~]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
576 ESTABLISHED
43 LISTEN
14 CLOSE_WAIT
5 TIME_WAIT
1 Foreign
1 established)
[root@andy ~]#

說明:

例項 15:檢視連線某服務埠最多的的 IP 地址

命令:

netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20

輸出:

[root@andy ~]# netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20
8 10.2.1.68
7 192.168.119.13
6 192.168.119.201
6 192.168.119.20
6 192.168.119.10
4 10.2.1.199
3 10.2.1.207
2 192.168.120.20
2 192.168.120.15
2 192.168.119.197
2 192.168.119.11
2 10.2.1.206
2 10.2.1.203
2 10.2.1.189
2 10.2.1.173
1 192.168.120.18
1 192.168.119.19
1 10.2.2.227
1 10.2.2.138
1 10.2.1.208
[root@andy ~]#

說明:

例項 16:找出程式執行的埠

命令:

netstat -ap | grep ssh

輸出:

[root@andy ~]# netstat -ap | grep ssh
tcp 0 0 *:ssh *:* LISTEN 2570/sshd
tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.1.205:54508 ESTABLISHED 13883/14
tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.0.68:62886 ESTABLISHED 20900/6
tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.2.131:52730 ESTABLISHED 20285/sshd: root@no
unix 2 [ ACC ] STREAM LISTENING 194494461 20900/6 /tmp/ssh-cXIJj20900/agent.20900
unix 3 [ ] STREAM CONNECTED 194307443 20285/sshd: root@no
unix 3 [ ] STREAM CONNECTED 194307441 20285/sshd: root@no
[root@andy ~]#

說明:

例項 17:在 netstat 輸出中顯示 PID 和程序名稱

命令:

netstat -pt

輸出:

[root@localhost ~]# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 248 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED 15725/0
[root@localhost ~]#

說明:

netstat -p 可以與其它開關一起使用,就可以新增 “PID/程序名稱” 到 netstat 輸出中,這樣 debugging 的時候可以很方便的發現特定埠執行的程式。

例項 18:找出執行在指定埠的程序

命令:

netstat -anpt | grep ':16064'

輸出:

[root@andy ~]# netstat -anpt | grep ':16064'
tcp 0 0 :::16064 :::* LISTEN 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.201:6462 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:26341 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:32208 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:32207 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:51303 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:51302 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50020 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50019 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56155 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50681 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50680 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:52136 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56989 ESTABLISHED 24594/java
tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56988 ESTABLISHED 24594/java
[root@andy ~]#

說明:

執行在埠 16064 的程序 id 為 24596,再通過 ps 命令就可以找到具體的應用程式了。