• Linux脚本练习之script088-netstat练习之输出每个IP的连接数


    script088

    题目

    注:题目来源于 SHELL31 netstat练习3-输出每个IP的连接数

    假设 netstat 命令运行的结果我们存储在 nowcoder.txt 里,格式如下:

    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 0.0.0.0:6160            0.0.0.0:*               LISTEN
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
    tcp        0      0 172.16.56.200:41856     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:49822     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:49674     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:42316     172.16.34.143:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:44076     172.16.240.74:6379      ESTABLISHED
    tcp        0      0 172.16.56.200:49656     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:58248     100.100.142.4:80        TIME_WAIT
    tcp        0      0 172.16.56.200:50108     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:41944     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:35548     100.100.32.118:80       TIME_WAIT
    tcp        0      0 172.16.56.200:39024     100.100.45.106:443      TIME_WAIT
    tcp        0      0 172.16.56.200:41788     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:58260     100.100.142.4:80        TIME_WAIT
    tcp        0      0 172.16.56.200:41812     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:41854     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:58252     100.100.142.4:80        TIME_WAIT
    tcp        0      0 172.16.56.200:49586     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:41754     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:50466     120.55.222.235:80       TIME_WAIT
    tcp        0      0 172.16.56.200:38514     100.100.142.5:80        TIME_WAIT
    tcp        0      0 172.16.56.200:49832     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:52162     100.100.30.25:80        ESTABLISHED
    tcp        0      0 172.16.56.200:50372     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:50306     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:49600     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:41908     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:60292     100.100.142.1:80        TIME_WAIT
    tcp        0      0 172.16.56.200:37650     100.100.54.133:80       TIME_WAIT
    tcp        0      0 172.16.56.200:41938     172.16.34.144:3306      ESTABLISHED
    tcp        0      0 172.16.56.200:49736     172.16.0.24:3306        ESTABLISHED
    tcp        0      0 172.16.56.200:41890     172.16.34.144:3306      ESTABLISHED
    udp        0      0 127.0.0.1:323           0.0.0.0:*
    udp        0      0 0.0.0.0:45881           0.0.0.0:*
    udp        0      0 127.0.0.53:53           0.0.0.0:*
    udp        0      0 172.16.56.200:68        0.0.0.0:*
    udp6       0      0 ::1:323                 :::*
    raw6       0      0 :::58                   :::*                    7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    现在需要你输出每个 IP 的连接数,按照连接数降序排序。你的脚本应该输出:

    172.16.0.24 10
    172.16.34.144 9
    100.100.142.4 3
    0.0.0.0 3
    172.16.34.143 1
    172.16.240.74 1
    120.55.222.235 1
    100.100.54.133 1
    100.100.45.106 1
    100.100.32.118 1
    100.100.30.25 1
    100.100.142.5 1
    100.100.142.1 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    脚本一

    使用 grep 命令查找 tcp 连接的记录行;然后使用 awk 命令提取第五列,即 IP 地址列;使用 sed 命令删除掉每行中冒号及之后的内容,只保留 IP 地址;然后使用 sort 命令排序;uniq -c 去重并统计次数;awk 命令调整显示顺序,让 IP 地址显示在第一列,出现次数显示在第二列;最后使用 sort 命令安装第二列降序排列。

    grep -E "(LISTEN|ESTABLISHED|TIME_WAIT)" nowcoder.txt | awk '{print $5}' | sed 's/:.*//' | sort | uniq -c | awk '{print $2,$1}' | sort -nr -k 2
    
    • 1

    脚本二

    使用 awk 命令编程和关联数组实现。awk 命令的 split 函数的语法是:split(str, arr, sep),即分割字符串 str 转换成使用分隔符 sep 分割后的一个数组 arr。第五列即 IP 地址和端口号列,用 split 函数通过冒号进行分割,那么分割后的数组中的第一个元素就是 IP 地址,然后在关联数组中存储 IP 地址和它的出现次数。最后在 END{ } 中循环输出关联数组的 IP 地址和出现次数;再对最终结果通过 sort 命令按照出现次数降序排列。

    awk '/tcp/{
      split($5, a, ":")
      map[a[1]]++
    } END{
      for(k in map)
        print k,map[k]
    }' nowcoder.txt | sort -nr -k 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    docker私有仓库registry
    【百度地图】绘制扇形图层
    splay平衡树
    TASK03|GitModel 假设检验3|分类数据检验
    Linux文本处理工具awk用法总结
    c++ 类的继承(二)
    一汽大众迈腾车前悬架系统设计
    springboot水环境检测系统的设计与实现毕业设计源码041446
    带滚动字幕的视频批量制作的方法
    vue面试题6
  • 原文地址:https://blog.csdn.net/cnds123321/article/details/125814151