netstat分组统计源ip连接数量,源ip进程数量

在日常运维中,经常有数据库连接过多,但是又不知道是哪些连接,所以可以通过用netstat,awk,sort,uniq,cut,sed组合找到我们想要的答案

netstat分组统计源ip连接数量

命令如下:
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c |sort -nr |head -10
结果如下:

[root@host-03 ~]# netstat -ant |awk '{print $5}'|cut -d ":" -f1|sort |uniq -c |sort -nr |head -10
    219 172.20.27.94
    184 172.20.27.93
    173 172.20.27.95
     38 0.0.0.0
     31 
      8 172.20.27.135
      2 127.0.0.1

解释如下:
netstat -ant 获取网络连接
netstat -ant |awk ‘{print $5}’ 获取第五列,也就是源ip:端口
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1 切割第5列,等同于split,获取切割后的第一个字段,也就是源ip
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c 排序加统计
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c |sort -nr |head -10 再排序取前十

源ip进程数量

[root@host-03 ~]# netstat -antp |awk '{print $5,$7}'|sed 's/\:/\ /g'|cut -d " " -f1,3|sort|uniq -c|sort -nr |head -10
     58 172.20.27.94 27513/java
     51 172.20.27.93 27513/java
     45 172.20.27.94 26894/java
     45 172.20.27.93 26894/java
     40 172.20.27.95 27513/java
     31 172.20.27.95 136197/java
     31 172.20.27.94 136197/java
     31  
     23 172.20.27.95 26894/java
     21 172.20.27.94 27976/redis-server

解释如下:
netstat -antp |awk ‘{print $5,$7}’ 获得第5列和第7列,分割是通过默认的空格
所以要用sed命令将ip:端口中的:转换为空格,方便后续cut进行切割
cut用空格切割后,选1,3列,分别为ip和进程号,然后再分组统计

参考资料

netstat命令
awk命令
cut命令
sort命令
uniq命令
sed命令

你可能感兴趣的