一、netstat命令說明
netstat常見參數 -a (all)顯示所有選項,默認不顯示LISTEN相關 -t (tcp)僅顯示tcp相關選項 -u (udp)僅顯示udp相關選項 -n 拒絕顯示別名,能顯示數字的全部轉化成數字。 -l 僅列出有在 Listen (監聽) 的服務狀態 -p 顯示建立相關鏈接的程序名 -r 顯示路由信息,路由表 -e 顯示擴展信息,例如uid等 -s 按各個協議進行統計 -c 每隔一個固定時間,執行該netstat命令。 提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到
二、統計TCP狀態
統計TCP狀態:netstat -ant | awk 'NR>=3 {++State[$6]} END {for (key in State) print key,State[key]}' ss -ant | awk 'NR>=2 {++State[$1]} END {for (key in State) print key,State[key]}' 首先是netstat內容輸出: [vagrant@localhost ~]$ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:39198 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 10.0.2.15:22 10.0.2.2:58263 ESTABLISHED tcp 0 0 :::51041 :::* LISTEN tcp 0 0 :::111 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN 命令注釋:netstat -n | awk '/^tcp/ {++state[$NF]} END {for(a in state) print a, state[a]}' /^tcp/ 濾出tcp開頭的記錄,屏蔽udp, socket等無關記錄。 state[] 相當於定義了一個名叫state的數組 NF The number of fields in the current input record.(表示輸入數據的字段總數,如上所示的記錄,NF等於6) $NF 表示某個字段的值,如上所示的記錄,$NF也就是$6,表示第6個字段的值,也就是TIME_WAIT state[$NF] 表示數組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態的連接數 ++state[$NF] 表示把某個數加一,如上所示的記錄,就是把state[TIME_WAIT]狀態的連接數加一 END 表示在最后階段要執行的命令 for(key in state) 遍歷數組 print key,"\t",state[key] 打印數組的鍵和值,中間可以用\t制表符分割,美化一下。 NR>=3 The total number of input records seen so far.(NR表示已輸入數據行數目,即表示從第二行開始處理,NR和NF都是內建變量) 同理ss工具下的awk語句應該修改成:ss -ant | awk 'NR>=2 {++State[$1]} END {for (key in State) print key,State[key]}' [root@localhost ~]# ss -ant State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 50 *:3306 *:* LISTEN 0 128 *:6379 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* ESTAB 0 0 10.0.2.15:22 10.0.2.2:58352 ESTAB 0 0 10.0.2.15:22 10.0.2.2:57127 LISTEN 0 128 :::80 :::* LISTEN 0 32 :::21 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
三、統計每個IP的連接數
統計每個IP的連接數:netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort -rn ss -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort -rn ---------------------------------------------------(netstat -n in CentOS6)---------------------------------------------------- Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 10.0.2.15:22 10.0.2.2:58262 ESTABLISHED tcp 0 0 10.0.2.15:22 10.0.2.2:58263 ESTABLISHED ---------------------------------------------------(ss -n in CentOS7)--------------------------------------------------------- Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 10.0.2.15:22 10.0.2.2:58352 tcp ESTAB 0 0 10.0.2.15:22 10.0.2.2:57127 netstat -n :以數字形式顯示地址信息 awk '/^tcp/ {print $5}' :篩選以tcp開頭的行,並打印5th filed. awk -F: '{print $1}' :以冒號為字段分隔符,打印第一個字段(-F fs 指定行中分隔數據字段的字段分隔符) uniq -c :去除重復項目,-c 進行計數 sort -rn :進行排序,-r 反向排序 -n 使用純數字進行排序
