有没有办法使用 SNMP 监视服务器端口(我使用 net-snmp-python 用 python 检查这个)。
到目前为止,我已经使用“nc”命令进行了非常简单的检查,但是我想看看是否可以使用 SNMP 执行此操作。
感谢您的回答和耐心。
最佳答案
好吧,如果您想使用 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 假设服务器绑定(bind)到默认地址(0.0.0.0)。但它们只能绑定(bind)到服务器 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 绑定(bind),你会有这样的事情。
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)。
关于python - 使用 SNMP (net-snmp) 检查端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3485203/