使用awk统计netstat结果
- 统计当前各种状态的连接总数:
[root@test ~]# netstat -anlpt | awk 'BEGIN{printf "%12s\t%s\n","State","Total_Nums"} {if (NR>2) a[$6]++} END {for(i in a){printf "%12s\t%i\n",i,a[i] | "sort -k 1"}}' State Total_Nums CLOSE_WAIT 5 ESTABLISHED 181 LISTEN 36 SYN_RECV 1 TIME_WAIT 356 [root@test ~]#
- netstat -anlpt 显示当前计算机所有的TCP连接
- BEGIN{printf “%12s\t%s\n”,”State”,”Total_Nums”} 在处理开始前使用printf格式化打印出标题行,使用第一列固定占位 12 个字符(%ns: 输出字符串。n是数字,指输出几个字符;%ni:输出整数。n是数字)
- if (NR>2) 跳过前两行
- a[$6]++ 以第6列$6(即状态列)的内容 作为数组a 的 字符下标 并进行数学累加作为其值;如 a[LISTEN]++、a[LISTEN]=36。
- END {for(i in a) 当一切都处理完成后,使用for循环取出 数组a 中的下标赋予变量 i;如 i=LISTEN。
- {printf “%12s\t%i\n”,i,a[i] 使用printf格式化打印出 i 变量 及 a[i] 的数组值;如 LISTEN 36。
- | “sort -k 1”}} 调用外部命令 sort 进行排序。
- 统计当前与外部IP连接的个数和状态
[root@test ~]# netstat -anlpt | grep -v LISTEN | awk '{split($5,b,":") ;if (NR > 2 && b[1] !~ /^[\s| ]*$/) printf "%s\t%-12s\n",b[1],$6}' | sort | uniq -c | sort -rnk 1 | awk 'BEGIN {printf "%s\t%s\t%s\n","Con_Num","Remote_Addr","State"} {print $0}' Con_Num Remote_Addr State 94 10.168.156.133 ESTABLISHED 58 10.117.61.39 ESTABLISHED 11 10.146.70.103 ESTABLISHED 6 10.162.80.57 ESTABLISHED 4 106.11.68.13 CLOSE_WAIT 2 127.0.0.1 ESTABLISHED 1 183.129.165.131 ESTABLISHED 1 140.205.140.205 ESTABLISHED 1 140.205.140.205 CLOSE_WAIT 1 127.0.0.1 TIME_WAIT 1 10.31.120.233 ESTABLISHED 1 10.28.14.70 ESTABLISHED 1 10.168.156.216 TIME_WAIT 1 10.117.55.98 ESTABLISHED 1 100.116.239.94 TIME_WAIT 1 100.116.239.74 TIME_WAIT 1 100.116.239.32 TIME_WAIT 1 100.116.239.19 TIME_WAIT 1 100.116.239.115 TIME_WAIT [root@test ~]#
- netstat -anlpt | grep -v LISTEN 查看当前所有连接,并过滤掉本地监听类型的
- split($5,b,”:”) 以 : 切分第5列(Foreign Address)的值,并放置到 数组b;如 b[1]=10.168.156.133 b[2]=12345。
- if (NR > 2 && b[1] !~ /^[\s| ]*$/) 跳过前两行,且 数组 b[1] 的值不为空(过滤掉IPv6地址)
- printf “%s\t%-12s\n”,b[1],$6 格式化输出 b[1] $6值;如 10.168.156.133 ESTABLISHED。
- | sort 将awk输出排序。
- | uniq -c 将排序后的数据进行去重并统计。
- | sort -rnk 1 将统计后的数据按 第1列(统计数值) 进行数字的降序排列。
- awk ‘BEGIN {printf “%s\t%s\t%s\n”,”Con_Num”,”Remote_Addr”,”State”} {print $0}’ 给最后的输出加上标题。
- 查看某一类状态的连接统计
将上一例中grep -v LISTEN改为过滤你要查看的状态即可。