zoukankan      html  css  js  c++  java
  • 监控TCP

    TCP端口的十一种连接状态:

    CLOSED:端口默认是关闭状态。
    
    LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。
    
    SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短暂,
    正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,
    服务器返回给客户端SYN确认之后就会将在自己的端口置为SYN_RCVD。
    
    SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为SYN_SENT。
    
    ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服
    务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。
    
    FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关
    闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文
    后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以
    FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
    
    FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态
    TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(Max
    Segment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志
    的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
    
    CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报
    文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送
    FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一
    下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情
    况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
    
    CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。
    
    LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即可以进入到CLOSED可用状态了。
    

    报错:

    [root@zabbix-server ~]# zabbix_get -s 172.31.1.25 -p 10050 -k "linux_tcp["tcp_status","LISTEN"]"
    zabbix_get [17979]: Check access restrictions in Zabbix agent configuration
    

    解决方法:

    zabbix-agent的配置文件中server选项没有添加serverIP,添加重启zabbix-agent即可
    

    监控tcp脚本

    [root@zabbix-web01 zabbix_agentd.d]# cat tcp_conn_muber.sh
    #!/bin/bash
    #
    #********************************************************************
    #Author:                xuanlv
    #QQ:                    360956175
    #Date:                  2021-07-31
    #FileName:             tcp_conn_muber.sh
    #URL:                   https://www.cnblogs.com/xuanlv-0413/
    #Description:          The test script
    #Copyright (C):         2021 All rights reserved
    #********************************************************************
    tcp_conn_status(){
        TCP_STAT=$1
        ss -tan | awk 'NR>1 {++state[$1]} END {for(i in state) print i,state[i]}' > /tmp/tcp_conn.txt
        TCP_NUM=$(grep "${TCP_STAT}" /tmp/tcp_conn.txt | awk -F" " '{print $2}')
        if [ -z $TCP_NUM ];then
            TCP_NUM=0
        fi
        echo $TCP_NUM
    }
    
    main(){
        case $1 in
        tcp_status)
            tcp_conn_status $2;
            ;;
        esac
    }
    
    main $1 $2
    

    授权

    [root@zabbix-web01 zabbix_agentd.d]# chmod a+x tcp_conn_muber.sh
    

    测试

    [root@zabbix-web01 zabbix_agentd.d]# bash tcp_conn_muber.sh tcp_status LISTEN
    19
    

    修改agent配置文件

    [root@zabbix-web01 zabbix]# cat /etc/zabbix/zabbix_agentd.conf
    
    UserParameter=linux_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/tcp_conn_muber.sh "$1" "$2"
    

    重启agent

    [root@zabbix-web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service
    

    在server端测试(需要按照要导入模板名字比如:linux_status,其他的名字将会获取不到数据信息)

    # 错误示范:
    [root@zabbix-server ~]# zabbix_get -s 172.31.1.25 -p 10050 -k "linux_tcp[tcp_status,TIME-WAIT]"
    ZBX_NOTSUPPORTED: Unsupported item key.
    
    
    [root@zabbix-server ~]# zabbix_get -s 172.31.1.25 -p 10050 -k "linux_status[tcp_status,TIME-WAIT]"
    149
    [root@zabbix-server ~]# zabbix_get -s 172.31.1.25 -p 10050 -k "linux_status["tcp_status","LISTEN"]"
    19
    

    在浏览器添加或者说是导入写好的模板

    查看图片可以看到数据就说明正常

  • 相关阅读:
    hxpCTF 2021 revvm Writeup
    微博自动化测试
    RosettaScripts学习笔记20211118
    amber进行分子动力学模拟水盒子和density需要注意的事项
    linux bash 字符串替换
    JQuery常用方法基础教程
    一些Js实现圆角的资料
    分享十个应用最广的Javascript框架
    .NET获取ACCESS自动编号列的一种方法(转)
    asp.net 底层资料
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/15171538.html
Copyright © 2011-2022 走看看