文档章节

PySNMP实现自定义getbulk(SNMPv3)

陈家栋
 陈家栋
发布于 2016/04/11 09:30
字数 590
阅读 167
收藏 0
#!/usr/bin/python3
# -*- coding=utf-8 -*-
#本模块由乾颐堂陈家栋编写,用于乾颐盾Python课程!
#QQ: 594284672
#亁颐堂官网www.qytang.com
#乾颐盾课程包括传统网络安全(防火墙,IPS...)与Python语言和黑客渗透课程!

from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdgen
from pysnmp.carrier.asynsock.dgram import udp
import sys

maxRepetitions = 0
# Create SNMP engine instance
snmpEngine = engine.SnmpEngine()

# Setup transport endpoint and bind it with security settings yielding
# a target name (choose one entry depending of the transport needed).
# UDP/IPv4
config.addSocketTransport(
    snmpEngine,
    udp.domainName,
    udp.UdpSocketTransport().openClientMode()
)

# Error/response reciever
def cbFun(sendRequesthandle, errorIndication, errorStatus, errorIndex,
          varBindTable, cbCtx):
    global maxRepetitions
    if errorIndication:
        print(errorIndication)
        return  # stop on error
    if errorStatus:
        print('%s at %s' % (
            errorStatus.prettyPrint(),
            errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
            )
        )
        return  # stop on error
    for varBindRow in varBindTable:
        if maxRepetitions == 0:
            break
    else:
        for oid, val in varBindRow:
            print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
        maxRepetitions -= 1
    return True # signal dispatcher to continue walking

def snmpv3_getbulk(ip='',user='',hash_meth=None,hash_key=None,cry_meth=None,cry_key=None,oid='',num=10):
    #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
    global maxRepetitions
    maxRepetitions = num
    hashval = None
    cryval = None
    model = None

    config.addTargetAddr(
        snmpEngine, 'yourDevice', 
        udp.domainName, (ip, 161),
        'my-creds'
    )
    #NoAuthNoPriv
    if hash_meth == None and cry_meth == None:
        hashval = config.usmNoAuthProtocol
        cryval = config.usmNoPrivProtocol
        model = 'noAuthNoPriv'
    #AuthNoPriv
    elif hash_meth != None and cry_meth == None:
        if hash_meth == 'md5':
            hashval = config.usmHMACMD5AuthProtocol
        elif hash_meth == 'sha':
            hashval = config.usmHMACSHAAuthProtocol
        else:
            print('哈希算法必须是md5 or sha!')
            return
        cryval = config.usmNoPrivProtocol
        model = 'authNoPriv'
    #AuthPriv
    elif hash_meth != None and cry_meth != None:
        if hash_meth == 'md5':
            hashval = config.usmHMACMD5AuthProtocol
        elif hash_meth == 'sha':
            hashval = config.usmHMACSHAAuthProtocol
        else:
            print('哈希算法必须是md5 or sha!')
            return
        if cry_meth == '3des':
            cryval = config.usm3DESEDEPrivProtocol
        elif cry_meth == 'des':
            cryval = config.usmDESPrivProtocol
        elif cry_meth == 'aes128':
            cryval = config.usmAesCfb128Protocol
        elif cry_meth == 'aes192':
            cryval = config.usmAesCfb192Protocol
        elif cry_meth == 'aes256':
            cryval = config.usmAesCfb256Protocol
        else:
            print('加密算法必须是3des, des, aes128, aes192 or aes256 !')
            return
        model = 'authPriv'
    #提供的参数不符合标准时给出提示
    else:
        print('三种USM: NoAuthNoPriv, AuthNoPriv, AuthPriv.。请选择其中一种。')
        return

    config.addV3User(
        snmpEngine, user,
        hashval, hash_key,
        cryval, cry_key
    )
    config.addTargetParams(snmpEngine, 'my-creds', user, model)

    # Prepare initial request to be sent
    cmdgen.BulkCommandGenerator().sendReq(
        snmpEngine,
        'yourDevice',
        0, 25,   # non-repeaters, max-repetitions
        ( (oid, None),),
        cbFun
    )

    # Run I/O dispatcher which would send pending queries and process responses
    snmpEngine.transportDispatcher.runDispatcher()

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_getbulk(ip,user,hm,hk,cm,ck,oid,num)
    except:
        print('参数设置应该如下:')
        print('python3 mygetbulk.py IP地址 用户名 认证算法 认证密钥 加密算法 加密密钥 OID 请求OID的数量')
        print('认证算法支持md5和sha')
        print('加密算法支持3des, des, aes128, aes192, aes256')
        print('例如:')
        print('python3 mygetbulk.py 192.168.1.1 user1 sha Cisc0123 des Cisc0123 1.3.6.1.2.1.2.2.1.10.1 10')


© 著作权归作者所有

陈家栋
粉丝 2
博文 12
码字总数 5545
作品 0
海淀
私信 提问
求 snmp 开发思路!

用 python+pysnmp 监控服务器信息。 看pysnmp文档太累了。英文不好!!! 求给个思路!

未名道人
2013/08/13
548
3
Linux 第20天自习 进程作业管理

Linux 第20天自习 进程作业管理 时间: 20180807 目录 进程间通信 进程类型 进程状态 进程的管理命令 ps, pgrep, pidof, top, htop, vmstat, glances, dstat, kill, killall 作业管理 bg, fg...

Winthcloud
2018/08/09
0
0
nginx 日志访问量统计

1.根据访问IP统计UV awk '{print $1}' access.log sort uniq -c wc -l 2.统计访问URL统计PV awk '{print $7}' access.log wc -l 3.查询访问最频繁的URL awk '{print $7}' access.log sort un......

martingpf
2017/12/15
0
0
zabbix_oracle_session_process监控

## 系统 Centos 6 # 获取oracle session process值 ############### oracle 中执行 ###################### cat session.sh #!/bin/bash # # Name:oracle会话及进程数查询,session.sql,sess......

812374156
2017/07/10
0
0
zabbix通过IPMI监控硬件环境(温度和风扇)

通过IPMItools达到收集数据的目的,然后通过与zabbix的结合实现数据统计和报警。 1.IPMI的配置: 1.1介绍 IPMI(Intelligent PlatformManagement Interface)即智能平台管理接口是使硬件管理...

pesen
2013/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
28分钟前
8
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
10
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
7
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部