欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux shell小试牛刀之一——统计服务器上的网络连接数

程序员文章站 2022-03-01 17:17:44
...

今天发现一台linux服务器上的网络连接数比较多,使用ss -s看一下,发现有差不多存在2000个连接,接下来我会通过管道并组合使用多个linux命令,统计一下哪些哪些ip与当前服务器建立的连接比较多。

1、使用ss -a打印出所有连接

# ss -a
Netid State      Recv-Q Send-Q                                  Local Address:Port                                                   Peer Address:Port         
......
nl    UNCONN     768    0                                             tcpdiag:kernel                                                             *                     
nl    UNCONN     4352   0                                             tcpdiag:ss/25880                                                           *              
......
nl    UNCONN     0      0                                                genl:kernel                                                             *                     
nl    UNCONN     0      0                                          scsi-trans:kernel                                                             *                     
p_raw UNCONN     0      0                                                   *:eth0                                                               *                     
u_str LISTEN     0      100                                     public/pickup 13732                                                             * 0                    
u_str LISTEN     0      100                                    public/cleanup 13736                                                             * 0                    
......
tcp   ESTAB      0      0                                   ::ffff:10.39.46.4:d-s-n                                           ::ffff:10.4.106.149:46830                
tcp   ESTAB      0      0                                   ::ffff:10.39.46.4:d-s-n                                           ::ffff:10.4.106.161:45138                
tcp   ESTAB      0      0                                   ::ffff:10.39.46.4:d-s-n                                           ::ffff:10.4.106.132:57338                
tcp   ESTAB      0      0                                   ::ffff:10.39.46.4:d-s-n                                             ::ffff:10.4.82.29:33724                
tcp   ESTAB      0      0                                   ::ffff:10.39.46.4:d-s-n                                           ::ffff:10.4.106.132:49730                  
......

会打印出非常多连接细节

2、使用grep筛选处理ESTAB状态的tcp连接

# ss -a |grep tcp |grep ESTAB 
tcp    ESTAB      0      0       ::ffff:10.39.46.4:d-s-n                ::ffff:10.4.95.183:55187                
tcp    ESTAB      0      0       ::ffff:10.39.46.4:d-s-n                 ::ffff:10.4.82.29:33742                
tcp    ESTAB      0      0       ::ffff:10.39.46.4:ddi-tcp-1             ::ffff:10.4.93.21:51003                      

有些上面的数据后,我想把最右面的那些ip筛选出来,从而可以对他们进行计数统计并按照连接的数量排序打印出来

3、使用cut截取后面的部分

# ss -a |grep tcp |grep ESTAB | cut -c70-
    ::ffff:10.39.10.7:59182                
   ::ffff:10.4.95.183:55187                
    ::ffff:10.4.82.29:33742                

-c参数是指按照字符顺序来截取,-c70-表示截取第70个字符及其后面的所有内容

4、使用grep+正则表达式把ip地址抓出来

# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' 
:10.4.95.183:
:10.4.82.29:
:10.4.93.21:

-E参数用来使用正则表达式,-o参数表示我只显示匹配到的内容

5、使用tr去掉冒号

# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '
 10.4.95.183 
 10.4.82.29 
 10.4.93.21 

6、使用sortuniq进行排序和计数

# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '| sort  |uniq -c
      2  10.11.65.191 
     11  10.39.10.7 
    151  10.39.10.90 
      2  10.39.10.94 

uniq 命令的-c参数用来计数

7、再次使用sort排序

# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '| sort  |uniq -c |sort -nr
    217  10.39.46.22 
    151  10.39.10.90 
     89  10.4.106.141 
     76  10.4.106.132 

sort命令的-n参数表示按照数字顺序来排序,-r参数标识逆序排列,也就是从大到小排列

这个结果就是我想要的网络连接数量统计了

下面是我写的几篇关于某个具体命令的用法