zoukankan      html  css  js  c++  java
  • TCP状态统计

    一、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,"	",state[key]
    打印数组的键和值,中间可以用	制表符分割,美化一下。
    
    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 使用纯数字进行排序
  • 相关阅读:
    海康、大华摄像头RTSP接入实现WEB端无插件流媒体服务EasyNVR实现海康大华宇视摄像头内容网页播放的方法
    【 D3.js 高级系列 — 6.0 】 值域和颜色
    物联网操作系统HelloX V1.78测试版正式发布
    【 D3.js 高级系列 — 5.1 】 颜色插值和线性渐变
    清华尹成老师主办的智锋互联
    【 随笔 】 D3 难吗?
    禅道,然之和蝉知入驻VM Depot
    【 D3.js 高级系列 — 5.0 】 颜色
    尹成老师主办培训教学机构 智锋互联 传播智慧我们用心,人生冲锋你们用心
    体验Azure的 Automation “自动化” 服务预览版
  • 原文地址:https://www.cnblogs.com/echo1937/p/6646208.html
Copyright © 2011-2022 走看看