PySNMP实现自定义getnext(SNMPv3)

#!/usr/bin/python3
# -*- coding=utf-8 -*-
#本模块由乾颐堂陈家栋编写,用于乾颐盾Python课程!
#QQ: 594284672
#亁颐堂官网www.qytang.com
#乾颐盾课程包括传统网络安全(防火墙,IPS...)与Python语言和黑客渗透课程!

from pysnmp.entity.rfc3413.oneliner import cmdgen
import sys

vallist = []
cmdGen = cmdgen.CommandGenerator()

def snmpv3_getnext(ip='',user='',hash_meth=None,hash_key=None,cry_meth=None,cry_key=None,oid='',num=1):
    #usmHMACMD5AuthProtocol - MD5 hashing
    #usmHMACSHAAuthProtocol - SHA hashing
    #usmNoAuthProtocol - no authentication
    #usmDESPrivProtocol - DES encryption
    #usm3DESEDEPrivProtocol - triple-DES encryption
    #usmAesCfb128Protocol - AES encryption, 128-bit
    #usmAesCfb192Protocol - AES encryption, 192-bit
    #usmAesCfb256Protocol - AES encryption, 256-bit
    #usmNoPrivProtocol - no encryption
    hashval = None
    cryval = None

    global vallist
    vallist = [None]*num
    #NoAuthNoPriv
    if hash_meth == None and cry_meth == None:
        hashval = cmdgen.usmNoAuthProtocol
        cryval = cmdgen.usmNoPrivProtocol
    #AuthNoPriv
    elif hash_meth != None and cry_meth == None:
        if hash_meth == 'md5':
            hashval = cmdgen.usmHMACMD5AuthProtocol
        elif hash_meth == 'sha':
            hashval = cmdgen.usmHMACSHAAuthProtocol
        else:
            print('哈希算法必须是md5 or sha!')
            return
        cryval = cmdgen.usmNoPrivProtocol
    #AuthPriv
    elif hash_meth != None and cry_meth != None:
        if hash_meth == 'md5':
            hashval = cmdgen.usmHMACMD5AuthProtocol
        elif hash_meth == 'sha':
            hashval = cmdgen.usmHMACSHAAuthProtocol
        else:
            print('哈希算法必须是md5 or sha!')
            return
        if cry_meth == '3des':
            cryval = cmdgen.usm3DESEDEPrivProtocol
        elif cry_meth == 'des':
            cryval = cmdgen.usmDESPrivProtocol
        elif cry_meth == 'aes128':
            cryval = cmdgen.usmAesCfb128Protocol
        elif cry_meth == 'aes192':
            cryval = cmdgen.usmAesCfb192Protocol
        elif cry_meth == 'aes256':
            cryval = cmdgen.usmAesCfb256Protocol
        else:
            print('加密算法必须是3des, des, aes128, aes192 or aes256 !')
            return
    #提供的参数不符合标准时给出提示
    else:
        print('三种USM: NoAuthNoPriv, AuthNoPriv, AuthPriv.。请选择其中一种。')
        return

    errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
        cmdgen.UsmUserData(user, hash_key, cry_key,
                           authProtocol=hashval,
                           privProtocol=cryval),
        cmdgen.UdpTransportTarget((ip, 161)),
        oid,
        lexicographicMode=True, maxRows=num, ignoreMonIncreasingOid=True
    )

    if errorIndication:
        print(errorIndication)
    else:
        if errorStatus:
            print('%s at %s' % (
                errorStatus.prettyPrint(),
                errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
                )
            )
        else:
            vallisttmp = []
            for varBindTableRow in varBindTable:
                for name, val in varBindTableRow:
#                    print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
                     vallisttmp.append(val)
            for i in range(num):
                vallist[i] = vallisttmp[i]

if __name__ == '__main__':
    try:
        ip = sys.argv[1]
        user = sys.argv[2]
        hm = sys.argv[3]
        hk = sys.argv[4]
        cm = sys.argv[5]
        ck = sys.argv[6]
        oid = sys.argv[7]
        num = int(sys.argv[8])
        snmpv3_getnext(ip,user,hm,hk,cm,ck,oid,num)
    except:
        print('参数设置应该如下:')
        print('python3 mygetnext.py IP地址 用户名 认证算法 认证密钥 加密算法 加密密钥 OID 请求OID的数量')
        print('认证算法支持md5和sha')
        print('加密算法支持3des, des, aes128, aes192, aes256')
        print('例如:')
        print('python3 mygetnext.py 192.168.1.1 user1 sha Cisc0123 des Cisc0123 1.3.6.1.2.1.2.2.1.10.1 10')


转载于:https://my.oschina.net/chenjiadong/blog/656445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值