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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479749.html
標籤:其他
上一篇:Ubuntu的一些軟體源
