2010-08-14 252 views
1

有没有一种方法可以使用SNMP监控服务器端口(我正在使用net-snmp-python来检查这个与python)。 到目前为止,我用“nc”命令检查过很简单,但是我想看看我是否可以使用SNMP来做到这一点。使用SNMP(net-snmp)检查端口

谢谢你的回答和耐心。

+1

你想要监视什么?哪些端口正在收听,是否接受连接? – Doon 2010-08-14 21:40:45

+1

我想检查标准端口,如FTP,SSH,HTTP(S),绑定,MySQL – abiko 2010-08-14 22:30:07

+1

你可能想尝试在serverfault上的这个问题 - 有可能是更好地适合你的需求的罐装解决方案。 – bstpierre 2010-08-15 02:52:47

回答

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网络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%肯定,如果我没有做任何SNMP的东西在Python的变量绑定是必需的,一些例子,我发现了它,有的却没有。但尝试任何方式。在上面的查询中,如果服务器没有监听,它将返回一个没有这样的OID,如果它打开并且监听结果应该是Integer(2)。

0

很难看到SNMP可能格格不入。

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

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

0

您可能会尝试针对要检查的端口运行nmap,但这并不一定会告诉您在开放端口另一端的服务器进程处于活动状态。