netstat是一個控制台命令,可用於監控本機的TCP/IP網路,獲得路由表、網路連接以及所有網路介面設備的狀態信息。一般情況下,我們主要使用netstat命令顯示與IP、TCP、UDP和ICMP協議相關的統計數據,檢驗本機各埠的網路連接情況。 比如說,在日常使用電腦時,如果連接到了網路,或多或少 ...
netstat是一個控制台命令,可用於監控本機的TCP/IP網路,獲得路由表、網路連接以及所有網路介面設備的狀態信息。一般情況下,我們主要使用netstat命令顯示與IP、TCP、UDP和ICMP協議相關的統計數據,檢驗本機各埠的網路連接情況。
比如說,在日常使用電腦時,如果連接到了網路,或多或少的會因接收到的數據包導致出錯數據或故障,在正常量的情況下,TCP/IP可以容許這些類型的錯誤,並且能夠自動重新發送數據包。但是如果累計的出錯情況數占所接收IP數據報的百分比過大,而且數目還在不斷增加,那麼我們就要進入控制台,使用netstat命令查看一下出現問題的連接埠。
netstat結果詳解
[root@honey-master ~] netstat
------------------------------------------------------------------------------------|
Active Internet connections (w/o servers) |
Proto Recv-Q Send-Q Local Address Foreign Address State |
tcp 0 0 honey-ma:xmltec-xmlmail honey-master:44714 ESTABLISHED |
tcp 0 0 honey-master:postgres honey-master:46680 ESTABLISHED |
tcp 0 0 honey-master:41756 honey-master:redis ESTABLISHED |
tcp 0 0 honey-master:42726 honey-master:redis ESTABLISHED |
tcp 0 0 localhost:39230 localhost:redis ESTABLISHED |
.. |
tcp6 0 0 honey-master:mysql honey-master:58232 ESTABLISHED |
tcp6 0 0 localhost:mysql localhost:53266 ESTABLISHED |
tcp6 0 0 honey-master:mysql honey-master:58446 ESTABLISHED |
udp 0 0 honey-master:bootpc _gateway:bootps ESTABLISHED |
udp 0 0 localhost:55920 localhost:55920 ESTABLISHED |
------------------------------------------------------------------------------------|---------------|
Active UNIX domain sockets (w/o servers) |
Proto RefCnt Flags Type State I-Node Path |
unix 3 [ ] DGRAM 1703 /run/systemd/notify |
unix 2 [ ] DGRAM 1705 /run/systemd/cgroups-agent |
... |
unix 3 [ ] STREAM CONNECTED 29975 /run/systemd/journal/stdout |
unix 3 [ ] STREAM CONNECTED 1543565 /var/run/docker.sock |
unix 3 [ ] STREAM CONNECTED 323733 |
unix 3 [ ] STREAM CONNECTED 189654 |
----------------------------------------------------------------------------------------------------|
Active Bluetooth connections (w/o servers)
Proto Destination Source State PSM DCID SCID IMTU OMTU Security
Proto Destination Source State Channel
從整體上看,netstat的輸出結果可以分為兩個部分:
一個是Active Internet connections,稱為有源TCP連接,其中"Recv-Q"和"Send-Q"指的是接收隊列和發送隊列。這些數字一般都應該是0。如果不是則表示軟體包正在隊列中堆積。這種情況只能在非常少的情況見到。
另一個是Active UNIX domain sockets,稱為有源Unix域套介面(和網路套接字一樣,但是只能用於本機通信,性能可以提高一倍)。
Proto顯示連接使用的協議,RefCnt表示連接到本套介面上的進程號,Types顯示套介面的類型,State顯示套介面當前的狀態,Path表示連接到套介面的其它進程使用的路徑名。
列出所有的tcp和udp埠:
欄位 | 含義 |
---|---|
proto |
協議名稱:tcp/udp |
Recv-Q |
網路接收隊列:表示收到的數據已經在本地接收緩衝,但是還有多少沒有被進程取走,recv()如果接收隊列Recv-Q一直處於阻塞狀態,可能是遭受了拒絕服務 denial-of-service 攻擊。 |
Send-Q |
網路發送隊列:對方沒有收到的數據或者說沒有Ack的,還是本地緩衝區,如果發送隊列Send-Q不能很快的清零,可能是有應用向外發送數據包過快,或者是對方接收數據包不夠快。這兩個值通常應該為0,如果不為0可能是有問題的。packets在兩個隊列里都不應該有堆積狀態。可接受短暫的非0情況。從步驟一的結果可以看到22埠對應的鏈路的send-Q中堆積了大量的數據包,可以判定是發送數據給目的地址的時候出現了阻塞的問題,導致了包堆積在本地緩存中,不能成功發出去。 |
Local-address |
表格下分析 |
Foreign Address |
與本機埠通信的外部socket。顯示規則與Local Address相同 |
State |
表格下分析 |
PID/program |
PID即進程id,Program即使用該socket的應用程式。其中0.0.0.0:1234——本地IP/Port信息。 1、0.0.0.0代表本機上可用的任意地址。比如0.0.0.0:1234表示本機上所有地址的1234埠,這樣ip電腦就不用重覆顯示了。 2、0.0.0.0為預設路由,即要達到不在路由表裡面的網段的包都走0.0.0.0這條規則。氣死,我們可以"通用"理解為代表"本機地址",1234在程式中體現為綁定的1234埠號 0.0.0.0: *——目的地址IP/Port信息。 |
Local Address
部分0.0.0.0:22表示監聽伺服器上所有的ip地址上的22埠
:::22 這個也表示監聽本地所有ip的22埠,跟上面的區別是這裡表示的是IPv6地址,上面的0.0.0.0表示的是本地所有IPv4地址NOTE “:::”這三個:的前兩個"::",是"0:0:0:0:0:0:0"的縮寫,相當於IPv6的"0.0.0.0",就是本機的所有IPv6地址,第三個:是IP和埠的分隔符
127.0.0.1:3310 這個表示監聽本機的loopback地址的3310埠(如果某個服務只監聽了迴環地址,那麼只能在本機進行訪問,無法通過tcp/ip 協議進行遠程訪問)
::1:323 這個表示監聽IPv6的迴環地址的323埠,::1表示IPv6的loopback地址
State 列共有12中可能的狀態,前面11種是按照TCP連接建立的三次握手和TCP連接斷開的四次揮手過程來描述的。
符號 狀態解釋 LISTEN 首先伺服器要打開一個socket進行監聽,狀態為LISTEN
the socket is listening for incoming connectionsSYN_SENT 客戶端通過應用程式調用connect進行active open,於是客戶端tcp發送一個SYN以請求建立一個鏈接,之後狀態設置為SYN_SENT
socket is actively attempting to establish a connectionSYN_RECV 服務端發出ACk確認包給客戶端,狀態變為SYN_RECV
a connection request has been received from the networkESTABLISHED 代表打開一個連接,雙方可以進行或者已經在數據交互了
the socket has an established connectionFIN_WAIT1 主動關閉服務端應用程式,tcp發送FIN請求關閉連接,之後進入FIN_WAIT1狀態
the socket is closed, and the connection is shutting down.CLOSE_WAIT 被動關閉,服務端接收到FIN請求後,就發出ACK以回應FIN請求(它的接收也作為文件結束符傳遞給上層應用程式),併進入CLOSE_WAIT狀態
the remote end has shut down, waiting for the socket to closeFIN_WAIT2 主動關閉接收到ACK後,就進入了FIN_WAIT2狀態
connection is closed, and the socket is waitng for a shut down from the remote end.LAST_ACK 服務端關閉一段時間後,接收到文件結束符的應用程式將調用CLOSE關閉連接,這導致發送一個等待原來向服務端發送連接中斷請求的確認FIN,死後進入LAST_ACK
the remote end has shut down, and the socket is closed. Waiting for anknowledgement.TIME_WAIT 在主動關閉端接收到FIN後,就會向對方發送ACk確認包,併進入TIME_WAIT狀態。
the socket is waiting after close to handle packets still in the networks.CLOSING both sockets are shutting down but we still don't have all our data sent CLOSED 連接結束 UNKNOWN 未知的狀態
參數
-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"參數相同。
-
列出所有埠情況
[root@xiesshavip002 ~] netstat -a # 列出所有埠 [root@xiesshavip002 ~] netstat -at # 列出所有TCP埠 [root@xiesshavip002 ~] netstat -au # 列出所有UDP埠
-
列出所有處於監聽狀態的 Sockets
[root@xiesshavip002 ~] netstat -l # 只顯示監聽埠 [root@xiesshavip002 ~] netstat -lt # 顯示監聽TCP埠 [root@xiesshavip002 ~] netstat -lu # 顯示監聽UDP埠 [root@xiesshavip002 ~] netstat -lx # 顯示監聽UNIX埠
-
顯示每個協議的統計信息 -s
[root@xiesshavip002 ~] netstat -s # 顯示所有埠的統計信息 [root@xiesshavip002 ~] netstat -st # 顯示所有TCP的統計信息 [root@xiesshavip002 ~] netstat -su # 顯示所有UDP的統計信息 IcmpMsg: InType3: 8623 OutType3: 791533 Udp: 2478625 packets received 1946 packets to unknown port received 0 packet receive errors 2482843 packets sent 0 receive buffer errors 0 send buffer errors IgnoredMulti: 21772 UdpLite: IpExt: InBcastPkts: 48838 InOctets: 36060130596 OutOctets: 17220772176 InBcastOctets: 6912337 InNoECTPkts: 99499687 InECT0Pkts: 14447
-
顯示 PID 和進程名稱 -p
[root@honey-master ~]# netstat -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 honey-ma:xmltec-xmlmail honey-master:44714 ESTABLISHED 173272/java tcp 0 0 honey-master:postgres honey-master:46680 ESTABLISHED 211809/postgres: po tcp 0 0 honey-master:41756 honey-master:redis ESTABLISHED 207937/python3 tcp 0 0 honey-master:42726 honey-master:redis ESTABLISHED 357854/python3
-
顯示核心路由信息 -r
[root@honey-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 10.0.0.0 0.0.0.0 255.255.255.248 U 0 0 0 br-9dff81edda62 10.0.106.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 [root@honey-master ~]# netstat -rn #顯示數字格式,不查詢主機功能變數名稱 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.0.106.1 0.0.0.0 UG 0 0 0 ens33 10.0.0.0 0.0.0.0 255.255.255.248 U 0 0 0 br-9dff81edda62 10.0.106.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-b570432f3378
-
查看埠和服務 -antp
[root@honey-master ~] netstat -antp | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 141882/sshd tcp 0 156 10.0.106.19:22 10.0.91.13:65533 ESTABLISHED 447311/sshd: root [ tcp6 0 0 :::22 :::* LISTEN 141882/sshd [root@honey-master ~]# netstat -antp | grep 5432 tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 132952/postmaster tcp 0 0 10.0.106.19:5432 10.0.106.19:46680 ESTABLISHED 211809/postgres: po tcp 0 0 10.0.106.19:5432 172.17.0.2:53512 ESTABLISHED 342190/postgres: po
-
列印網路介面 -i
[root@honey-master ~] netstat -i Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg br-9dff81edda62 1500 14994174 0 0 0 11310667 0 0 0 BMU br-b570432f3378 1500 52444002 0 0 0 52444002 0 0 0 BMRU docker0 1500 14994174 0 0 0 11310667 0 0 0 BMRU ens33 1500 32370072 0 0 0 18948958 0 0 0 BMRU
上面輸出的信息比較原始。我們將 -e 選項和 -i 選項搭配使用,可以輸出用戶友好的信息。輸出效果等同於ifconfig。
-
顯示多播組信息 -g
[root@honey-master ~]# netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net ens33 1 all-systems.mcast.net docker0 1 all-systems.mcast.net lo 1 ff01::1 ens33 1 ff02::1 ens33 1 ff01::1 docker0 1 ff02::1
-
列印active狀態的連接:active 狀態的套接字連接用 "ESTABLISHED" 欄位表示,所以我們可以使用 grep 命令獲得 active 狀態的連接:
配合 watch 命令監視 active 狀態的連接:`watch -d -n0 ""
-
查看服務是否在運行
[root@honeypot ~]# netstat -aple | grep nginx tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN root 42158 3359/nginx: master tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN root 42160 3359/nginx: master tcp 0 0 0.0.0.0:https 0.0.0.0:* LISTEN root 42159 3359/nginx: master tcp 0 0 honeypot:https 10.0.80.6:46770 ESTABLISHED nginx 1406865 3360/nginx: worker
說明nginx正在運行,但如果關閉掉redis服務,狀態都變成了關閉或者等待關閉
[root@honeypot ~] netstat -aple | grep redis tcp 1 0 honeypot:41338 honeypot:redis CLOSE_WAIT root 73035 8683/python3 tcp 1 0 honeypot:32926 honeypot:redis CLOSE_WAIT root 1467648 159493/python3 tcp 0 0 honeypot:redis honeypot:41332 FIN_WAIT2 root 0 - tcp 1 0 honeypot:41376 honeypot:redis CLOSE_WAIT root 73107 8822/python3 tcp 0 0 localhost:redis localhost:47240 TIME_WAIT root 0 -
組合命令
-
查看TCP連接狀態
[root@honeypot ~]# netstat -nat |awk '{print $6}' |sort|uniq -c|sort -rn 174 ESTABLISHED 35 TIME_WAIT 31 LISTEN 26 CLOSE_WAIT 1 established) 1 Foreign
-
查找請求數請20個IP
[root@honeypot ~]# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 先把狀態全都取出來,然後使用uniq -c統計,之後再進行排序。 15 127.0.0.1 4 10.0.81.29 3 10.0.81.35 3 10.0.80.6 2 0.0.0.0 1
-
查看連接某服務埠最多的的IP地址
[root@honeypot ~]# netstat -nat | grep "10.0.81.29:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20 1 10.0.91.13
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16298654.html