今天來學(xué)習(xí)一個(gè)命令netstat,官方文檔 https://linux.die.net/man/8/netstat粘昨。
簡介
netstat 命令用于顯示各種網(wǎng)絡(luò)相關(guān)信息,如網(wǎng)絡(luò)連接鸳吸,路由表,接口狀態(tài) (Interface Statistics)速勇,masquerade 連接晌砾,多播成員 (Multicast Memberships) 等等。
參數(shù)
-r : 顯示內(nèi)核路由表烦磁。
-g : 顯示IPv4和IPv6的多播組成員信息养匈。
-i : 顯示所有網(wǎng)絡(luò)接口的表。
-M : 顯示偽裝連接的列表都伪。
-s : 顯示每個(gè)協(xié)議的統(tǒng)計(jì)信息呕乎。
-v : 詳細(xì)地告訴用戶發(fā)生了什么。
-n : 顯示數(shù)字地址(ip)陨晶,而不是主機(jī)名.
-c : 每個(gè)一個(gè)指定時(shí)間執(zhí)行以下netstat
-e : 顯示擴(kuò)展信息
-o : 顯示與網(wǎng)絡(luò)相關(guān)的時(shí)間
-p : 顯示每個(gè)socket的 PID 和 程序name
-l : 只顯示在偵聽中的socket
-a : 顯示在偵聽中和不在偵聽中的socket
--numeric-hosts : 輸出host
--numeric-ports : 輸出端口
--numeric-users : 輸出用戶id
輸出
Proto : socket使用的協(xié)議猬仁。
Recv-Q : 表示收到的數(shù)據(jù)已經(jīng)在本地接收緩沖,但是還有多少?zèng)]有被進(jìn)程取走先誉。
Send-Q :對(duì)方?jīng)]有收到的數(shù)據(jù)或者說沒有Ack的,還是本地緩沖區(qū)湿刽。
- Recv-Q Send-Q分別表示網(wǎng)絡(luò)接收隊(duì)列,發(fā)送隊(duì)列褐耳。Q是Queue的縮寫诈闺。
- 這兩個(gè)值通常應(yīng)該為0,如果不為0可能是有問題的铃芦。packets在兩個(gè)隊(duì)列里都不應(yīng)該有堆積狀態(tài)雅镊。可接受短暫的非0情況刃滓。短暫的Send-Q隊(duì)列發(fā)送pakets非0是正常狀態(tài)仁烹。
- 如果接收隊(duì)列Recv-Q一直處于阻塞狀態(tài),可能是遭受了拒絕服務(wù) denial-of-service 攻擊注盈。
- 如果發(fā)送隊(duì)列Send-Q不能很快的清零晃危,可能是有應(yīng)用向外發(fā)送數(shù)據(jù)包過快叙赚,或者是對(duì)方接收數(shù)據(jù)包不夠快老客。
Local Address : 本地地址
Foreign Address : 目標(biāo)地址
State :socket的狀態(tài)僚饭。 UDP連接沒有狀態(tài)為空
State 詳解(詳細(xì)解釋戳:http://www.reibang.com/p/a546cd27f96e):
- ESTABLISHED : socket已建立連接 (三次握手中的第三次)
- SYN_SENT : TCP主動(dòng)打開,發(fā)送SYN (三次握手中的第一次)
- SYN_RECV : 接受到SYN胧砰,并且發(fā)送SYN鳍鸵,ACK(SYN+1)(三次握手中第二次的狀態(tài))
- FIN_WAIT1 : 應(yīng)用主動(dòng)關(guān)閉連接狀態(tài) (四次握手第一次的狀態(tài) )
- FIN_WAIT2 : 對(duì)方響應(yīng)關(guān)閉請(qǐng)求后的狀態(tài)(ACK=FIN+1)四次握手第二次的狀態(tài) )
- TIME_WAIT : 接收到對(duì)方已經(jīng)關(guān)閉連接的響應(yīng)后進(jìn)入的狀態(tài)。(四次握手的第三次)
- CLOSED :連接已經(jīng)關(guān)閉
- CLOSE_WAIT : 遠(yuǎn)端接到被動(dòng)關(guān)閉請(qǐng)求尉间,發(fā)送ack偿乖。
- LAST_ACK : 遠(yuǎn)端傳輸已經(jīng)關(guān)閉,發(fā)送已關(guān)閉信息哲嘲。
- LISTEN : socket正在監(jiān)聽傳入的連接贪薪。這些socket不包括在輸出中,除非 --listening (-l) or --all (-a)
- CLOSING :連接已經(jīng)關(guān)閉時(shí)的狀態(tài)眠副,但是socket四次握手中的數(shù)據(jù)還沒有發(fā)送完画切。
- UNKNOWN : 未知狀態(tài)。
User : 用戶名或者uid
Pid :進(jìn)程id
使用方法
netstat -a 顯示所有socket
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 10.222.69.194.52290 111.202.100.40.http ESTABLISHED
tcp4 0 0 10.222.69.194.52289 10.210.97.18.https ESTABLISHED
tcp4 0 0 10.222.69.194.52281 10.210.97.18.https ESTABLISHED
tcp4 0 0 10.222.69.194.52278 10.81.254.21.ndl-aas ESTABLISHED
tcp4 31 0 10.222.69.194.52277 202.108.23.152.https CLOSE_WAIT
tcp4 0 0 10.222.69.194.52276 124.67.215.8.https ESTABLISHED
tcp4 0 0 10.222.69.194.52242 10.81.254.21.ndl-aas ESTABLISHED
tcp4 0 0 10.222.69.194.51973 17.252.156.36.5223 ESTABLISHED
tcp6 0 0 *.51538 *.* LISTEN
tcp4 0 0 *.51538 *.* LISTEN
tcp4 0 0 10.222.69.194.49809 223.167.84.139.http-al ESTABLISHED
tcp4 0 0 10.222.69.194.49765 172.16.78.199.ssh ESTABLISHED
tcp4 0 0 10.222.69.194.49738 10.210.97.118.http CLOSE_WAIT
tcp4 0 0 *.* *.* CLOSED
tcp4 0 0 localhost.15292 *.* LISTEN
tcp46 0 0 *.11300 *.* LISTEN
tcp46 0 0 *.49937 *.* LISTEN
tcp4 0 0 *.49937 *.* LISTEN
tcp4 0 0 10.222.69.194.52291 13.107.5.88.https TIME_WAIT
netstat -t 顯示所有tcp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:cslistener localhost:59022 TIME_WAIT
...
找出運(yùn)行程序的端口 netstat -ap | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1153/sshd
tcp 0 0 10.13.2.215:22 172.16.78.199:1628 ESTABLISHED 10746/sshd:---
tcp 0 0 10.13.2.215:22 10.55.21.253:27749 ESTABLISHED 6017/sshd:---
tcp 0 0 10.13.2.215:22 172.16.78.199:11353 ESTABLISHED 4387/sshd:---
查找某個(gè)端口是否被占用 netstat -ap | grep ':80'
查看連接80端口最多的的IP地址 netstat -tn | grep '127.0.0.1:80' |awk '{print 1}'| sort | uniq -c | sort -nr | less
2796 10.41.1.103
2746 10.41.1.64
2712 10.41.1.65
2684 10.41.1.104
查看TCP連接最多狀態(tài) netstat -t |awk '{print $6}' | sort | uniq -c | sort -rn
64342 TIME_WAIT
192 FIN_WAIT2
88 ESTABLISHED
7 FIN_WAIT1
3 SYN_RECV
1 LAST_ACK
1 Foreign
netstat 命令非常的好用囱怕,非常適合查看網(wǎng)絡(luò)連接的狀態(tài)霍弹。為了更好使用這個(gè)命令,最好了解一下TCP的三次握手和四次握手娃弓。