使用SNMP检查端口(net-snmp)

时间:2010-08-14 21:34:12

标签: python networking snmp

有没有办法使用SNMP监控服务器端口(我使用net-snmp-python来检查这个用python)。 到目前为止,我已经使用“nc”命令检查了非常简单,但我想知道我是否可以使用SNMP执行此操作。

感谢您的回答和耐心。

3 个答案:

答案 0 :(得分:3)

如果您想使用SNMP来确切地查看正在侦听的端口,那么您应该能够使用以下OIDS并走在桌面上

  "1.3.6.1.2.1.6.13.1.1" tcpConnState 
  "1.3.6.1.2.1.7.5.1.1"  udpLocalAddress

行走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,您将获得

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)。

答案 1 :(得分:0)

很难看出SNMP的适用范围。

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

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

答案 2 :(得分:0)

您可以尝试对要检查的端口运行nmap,但这并不一定表明开放端口另一端的服务器进程是活着。