【问题标题】:Check ports with SNMP (net-snmp)使用 SNMP (net-snmp) 检查端口
【发布时间】:2011-01-11 09:08:43
【问题描述】:

有没有办法使用 SNMP 监控服务器端口(我正在使用 net-snmp-python 来用 python 进行检查)。 到目前为止,我已经使用“nc”命令进行了非常简单的检查,但是我想看看我是否可以使用 SNMP 来做到这一点。

感谢您的回答和耐心。

【问题讨论】:

  • 您到底想监控什么?哪些端口正在侦听,它们是否接受连接?
  • 我想检查标准端口,例如 FTP、SSH、HTTP(S)、BIND、MySQL
  • 您可能想在 serverfault 上尝试这个问题 - 可能会有更适合您需求的预制解决方案。

标签: python networking snmp


【解决方案1】:

如果你想使用 SNMP 来准确地查看正在监听的端口,你应该能够使用以下 OIDS 并遍历表

  "1.3.6.1.2.1.6.13.1.1" tcpConnState 
  "1.3.6.1.2.1.7.5.1.1"  udpLocalAddress

Walking UDP 会给你这样的东西:

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.7.5.1.1                                                    
   UDP-MIB::udpLocalAddress.0.0.0.0.68 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.32908 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.33281 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.33795 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.34822 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.0.0.0.0.44782 = IpAddress: 0.0.0.0
   UDP-MIB::udpLocalAddress.192.168.1.13.9950 = IpAddress: 192.168.1.13

和 TCP 类似:

snmpwalk -cpublic 192.168.1.13 1.3.6.1.2.1.6.13.1.1                                                   
   TCP-MIB::tcpConnState.0.0.0.0.21.0.0.0.0.0 = INTEGER: listen(2)
   TCP-MIB::tcpConnState.0.0.0.0.23.0.0.0.0.0 = INTEGER: listen(2)
   TCP-MIB::tcpConnState.0.0.0.0.80.0.0.0.0.0 = INTEGER: listen(2)

查看表格将向您显示正在侦听的端口,并可以为您提供一些信息。

现在,如果您只想检查您在问题中列出的特定端口是否正在侦听,您可以使用以下 OIDS 进行检查。

ftp -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.21.0.0.0.0.0
ssh -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.22.0.0.0.0.0
http --  1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0
https -- 1.3.6.1.2.1.6.13.1.1.0.0.0.0.443.0.0.0.0.0
bind -- 1.3.6.1.2.1.7.5.1.1.0.0.0.0.53 

上述 OIDS 假设服务器绑定到默认地址(0.0.0.0)。但它们只能绑定到服务器 IP 地址(取决于配置)。在这种情况下,假设你的服务器 IP 是 192.168.10.1 你会得到 ​​p>

1.3.6.1.2.1.7.5.1.1.192.168.10.1.53  for bind

所以我想如果你想知道 http 是否正在监听主机 192.168.10.1 上的默认地址,使用 python net snmp 绑定你会得到类似的东西。

import netsnmp
oid = netsmp.Varbind('1.3.6.1.2.1.6.13.1.1.0.0.0.0.80.0.0.0.0.0')
result = netsnmp.snmp(oid,
                      Version = 2,
                      DestHost="192.168.10.1",
                      Community="public")

我不能 100% 确定是否需要 Varbind,因为我没有在 python 中做任何 snmp 的东西,我发现的一些例子有它,有些没有。但无论哪种方式都可以尝试。在上面的查询中,如果服务器没有监听它将返回一个没有这样的 OID,如果它是打开的并且监听结果应该是 Integer(2)。

【讨论】:

    【解决方案2】:

    很难看出 SNMP 的适用范围。

    监控的最佳方式是使用特定协议的客户端(即,运行一个简单的查询与 MySQL,使用 FTP 检索测试文件等)

    如果这不起作用,您可以打开一个 TCP 或 UDP 套接字到端口,看看是否有人在监听。

    【讨论】:

      【解决方案3】:

      您可以尝试对您要检查的端口运行nmap,但这并不一定会提示您打开端口另一侧的服务器进程 是活动的。

      【讨论】:

        猜你喜欢
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多