0

我希望你能帮助我,目标是获得使用 pysnmp 连接到 ap 的客户端数量,我想我已经接近了,我知道我可能必须使用 pyasn1,但我得到了一个给我的部分以下错误:

('---------->', DisplayString('', subtypeSpec=ConstraintsIntersection(ConstraintsIntersection(ConstraintsIntersection(ConstraintsIntersection(),ValueSizeConstraint(0, 255)),ValueSizeConstraint(0, 255))))

我的代码是这样的:

from pysnmp.hlapi import *
from pysnmp.proto import rfc1905

setcommunity = "public"
host = "192.168.1.51"
oid = '1.3.6.1.4.1.1.4.1.14179.2.1.1.1.38'
ssid = "Cisco1852i"
snmp_engine = SnmpEngine()

#this function gets the interface status of the cisco Switch

def show_apClients():
       clients = nextCmd (snmp_engine,
               CommunityData(setcommunity),
               UdpTransportTarget((host, 161)),
               ContextData(),

       ObjectType(ObjectIdentity('SNMPv2-SMI', 'mib-2', '1.3.6.1.4.1.14179.2.1.1.1.38')))
       errorIndication, errorStatus, errorIndex, varBinds = next(clients) 
       numberClients = varBinds[0][1]
       print("----------->", numberClients)
       return numberClients

nClients = show_apClients()

print(".....------->", nClients)

我认为OID,MIB和其余的都可以,因为我通过命令:

sudo snmpwalk.py -v 2c -c 公共 192.168.1.51 1.3.6.1.4.1.14179.2.1.4.1.7 | wc -l

或者

sudo snmpwalk.py -v 2c -c public 192.168.1.51 1.3.6.1.4.1.14179.2.1.1.18 ” 命令行可以获取客户端数量

4

1 回答 1

0

如果你想用 pysnmp 复制这个 Net-SNMP 命令:

snmpwalk.py -v 2c -c public 192.168.1.51 1.3.6.1.4.1.14179.2.1.4.1.7 | wc -l

那么我想你应该做这样的事情:

def show_apClients():
    clients = nextCmd(
        snmp_engine,
        CommunityData(setcommunity),
        UdpTransportTarget((host, 161)),
        ContextData(),
        ObjectType(ObjectIdentity('1.3.6.1.4.1.14179.2.1.4.1.7')),
        lexicographicMode=True
    )

    # this iterates over generator
    numberClients = len(tuple(clients))
    print("----------->", numberClients)
    return numberClients

这个想法是让 pysnmp 遍历1.3.6.1.4.1.14179.2.1.4.1.7分支并返回该 OID 前缀下的节点(行)数。我假设这反映了与 AP 关联的用户数量。

于 2018-02-07T11:41:26.403 回答