溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用netstat和awk命令來統(tǒng)計(jì)網(wǎng)絡(luò)連接數(shù)

發(fā)布時(shí)間:2021-12-30 16:32:58 來源:億速云 閱讀:206 作者:小新 欄目:網(wǎng)絡(luò)安全

小編給大家分享一下如何使用netstat和awk命令來統(tǒng)計(jì)網(wǎng)絡(luò)連接數(shù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

會(huì)得到類似下面的結(jié)果,具體數(shù)字會(huì)有所不同:

LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669

狀態(tài):描述
CLOSED:無連接是活動(dòng)的或正在進(jìn)行
LISTEN:服務(wù)器在等待進(jìn)入呼叫
SYN_RECV:一個(gè)連接請(qǐng)求已經(jīng)到達(dá),等待確認(rèn)
SYN_SENT:應(yīng)用已經(jīng)開始,打開一個(gè)連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時(shí)嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個(gè)釋放
LAST_ACK:等待所有分組死掉

也就是說,這條命令可以把當(dāng)前系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)分類匯總。

下面解釋一下為啥要這樣寫:

[@more@]

一個(gè)簡(jiǎn)單的管道符連接了netstat和awk命令。

------------------------------------------------------------------

先來看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你實(shí)際執(zhí)行這條命令的時(shí)候,可能會(huì)得到成千上萬條類似上面的記錄,不過我們就拿其中的一條就足夠了。

------------------------------------------------------------------

再來看看awk:

/^tcp/
濾出tcp開頭的記錄,屏蔽udp, socket等無關(guān)記錄。

state[]
相當(dāng)于定義了一個(gè)名叫state的數(shù)組

NF
表示記錄的字段數(shù),如上所示的記錄,NF等于6

$NF
表示某個(gè)字段的值,如上所示的記錄,$NF也就是$6,表示第6個(gè)字段的值,也就是TIME_WAIT

state[$NF]
表示數(shù)組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態(tài)的連接數(shù)

++state[$NF]
表示把某個(gè)數(shù)加一,如上所示的記錄,就是把state[TIME_WAIT]狀態(tài)的連接數(shù)加一

END
表示在最后階段要執(zhí)行的命令

for(key in state)
遍歷數(shù)組

print key,"t",state[key]
打印數(shù)組的鍵和值,中間用t制表符分割,美化一下。

如發(fā)現(xiàn)系統(tǒng)存在大量TIME_WAIT狀態(tài)的連接,通過調(diào)整內(nèi)核參數(shù)解決,
vim /etc/sysctl.conf
編輯文件,加入以下內(nèi)容:

view sourceprint?1.net.ipv4.tcp_syncookies = 1 2.net.ipv4.tcp_tw_reuse = 1 3.net.ipv4.tcp_tw_recycle = 1 4.net.ipv4.tcp_fin_timeout = 30
然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。

net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。
net.ipv4.tcp_fin_timeout 修改系統(tǒng)默認(rèn)的 TIMEOUT 時(shí)間

下面附上TIME_WAIT狀態(tài)的意義:

客戶端與服務(wù)器端建立TCP/IP連接后關(guān)閉SOCKET后,服務(wù)器端連接的端口
狀態(tài)為TIME_WAIT

是不是所有執(zhí)行主動(dòng)關(guān)閉的socket都會(huì)進(jìn)入TIME_WAIT狀態(tài)呢?
有沒有什么情況使主動(dòng)關(guān)閉的socket直接進(jìn)入CLOSED狀態(tài)呢?

主動(dòng)關(guān)閉的一方在發(fā)送最后一個(gè) ack 后
就會(huì)進(jìn)入 TIME_WAIT 狀態(tài) 停留2MSL(max segment lifetime)時(shí)間
這個(gè)是TCP/IP必不可少的,也就是“解決”不了的。

也就是TCP/IP設(shè)計(jì)者本來是這么設(shè)計(jì)的
主要有兩個(gè)原因
1。防止上一次連接中的包,迷路后重新出現(xiàn),影響新連接
(經(jīng)過2MSL,上一次連接中所有的重復(fù)包都會(huì)消失)
2??煽康年P(guān)閉TCP連接
在主動(dòng)關(guān)閉方發(fā)送的最后一個(gè) ack(fin) ,有可能丟失,這時(shí)被動(dòng)方會(huì)重新發(fā)
fin, 如果這時(shí)主動(dòng)方處于 CLOSED 狀態(tài) ,就會(huì)響應(yīng) rst 而不是 ack。所以
主動(dòng)方要處于 TIME_WAIT 狀態(tài),而不能是 CLOSED 。

TIME_WAIT 并不會(huì)占用很大資源的,除非受到攻擊。

還有,如果一方 send 或 recv 超時(shí),就會(huì)直接進(jìn)入 CLOSED 狀態(tài)
-------------------------------------------------------------------------------------------------------
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
netstat -tna | cut -b 49- |grep TIME_WAIT | sort
取出目前所有 TIME_WAIT 的連接 IP ( 排序過 )

net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉;
  net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
  net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。
  net.ipv4.tcp_keepalive_time = 1200 表示當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí),改為20分鐘。
  net.ipv4.ip_local_port_range = 1024 65000 表示用于向外連接的端口范圍。缺省情況下很?。?2768到61000,改為1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊(duì)列的長(zhǎng)度,默認(rèn)為1024,加大隊(duì)列長(zhǎng)度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系統(tǒng)同時(shí)保持TIME_WAIT套接字的最大數(shù)量,如果超過這個(gè)數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認(rèn)為180000,改為5000。對(duì)于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對(duì)于Squid,效果卻不大。此項(xiàng)參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。

看完了這篇文章,相信你對(duì)“如何使用netstat和awk命令來統(tǒng)計(jì)網(wǎng)絡(luò)連接數(shù)”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI