python SNMP 网段指定community进行扫描,返回 json PySNMPScan

PySNMPScan

pysnmp network scan script

simple SNMPWalk script New line

https://github.com/routertricksdotcom/PySNMPScan

 

python2下运行:

python pysnmp_scan_script.py

返回json:

[{'sysname': 'x220win10', 'sysobjectid': '1.3.6.1.4.1.311.1.1.3.1.1', 'mgmtIP': '192.168.111.1', 'sysdesc': 'Hardware: Intel64 Family 6 Model 42 Stepping 7 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 17763 Multiprocessor Free)', 'syslocation': '', 'sysuptime': '229894', 'syscontact': ''}, {'sysname': 'phpsnmp', 'sysobjectid': '1.3.6.1.4.1.8072.3.2.10', 'mgmtIP': '192.168.111.139', 'sysdesc': 'Linux phpsnmp 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64', 'syslocation': 'Unknown (edit /etc/snmp/snmpd.conf)', 'sysuptime': '42430', 'syscontact': 'Root <root@localhost> (configure /etc/snmp/snmp.local.conf)'}]

 


from pysnmp.hlapi import *
import netaddr


def snmp_devcie_scan(comnty, hostip, ):
    errorIndication, errorStatus, errorIndex, varBinds = next(
        getCmd(SnmpEngine(),
               CommunityData(comnty, mpModel=0),
               UdpTransportTarget((hostip, 161), timeout=1, retries=0),
               ContextData(),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysUpTime', 0)),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysLocation', 0)),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysContact', 0)),
               ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysObjectID', 0)),
               )

    )

    if errorIndication:
        print(errorIndication)
    elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                            errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
    else:
        for varBind in varBinds:
            # print(' = '.join([x.prettyPrint() for x in varBind]))
            print varBinds
            # return varBinds[0][1], varBinds[1][1], varBinds[2][1], varBinds[3][1]
            # print varBind
            return varBinds

mgmt_ip_list = []
snmp_scanrange = netaddr.IPNetwork('172.16.1.100/24')
for ip in snmp_scanrange.iter_hosts():
    mgmt_ip_list.append(ip)

snmpwalk_data = []
for mgmtIP in mgmt_ip_list:
    # print str(mgmtIP)
    try:
        snmp_raw_data = snmp_devcie_scan(comnty='public', hostip=str(mgmtIP))
        snmpscandata = {'sysname': str(snmp_raw_data[0][1]),
                        'sysdesc': str(snmp_raw_data[1][1]),
                        'sysuptime': str(snmp_raw_data[2][1]),
                        'syslocation': str(snmp_raw_data[3][1]),
                        'syscontact': str(snmp_raw_data[4][1]),
                        'sysobjectid': str(snmp_raw_data[5][1]),
                        'mgmtIP': str(mgmtIP),
                        }
        snmpwalk_data.append(snmpscandata)
    except:
        print 'snmp scan error %s' % str(mgmtIP)

print snmpwalk_data
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值