Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的SNMP代理_Python_Python 2.7_Twisted_Snmp_Pysnmp - Fatal编程技术网

Python中的SNMP代理

Python中的SNMP代理,python,python-2.7,twisted,snmp,pysnmp,Python,Python 2.7,Twisted,Snmp,Pysnmp,我需要一个python中的SNMP代理,它监听特定端口并响应基本的SNMP命令(如GTE、SET、GETNEXT…等) 如果任何人有代码,请在这篇帖子上回复 import socket import netsnmp s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) s.bind((HOST, PORT)) #give host

我需要一个python中的SNMP代理,它监听特定端口并响应基本的SNMP命令(如GTE、SET、GETNEXT…等)

如果任何人有代码,请在这篇帖子上回复

import socket
import netsnmp
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
s.bind((HOST, PORT)) #give host ip and port no:
s.listen(2)

conn, addr = s.accept()
data = conn.recv(1024)
bindvariable = netsnmp.Varbind("give full oid here")
xx = netsnmp.snmpget(bindvariable, Version = 2, DestHost = '192.168.0.216', Community='private')

类似地,您也可以使用snmpset和walk

上有一组SNMP命令响应程序脚本

下面是一个简单的基于PySNMP的命令响应程序,它使用/tmp中的文本文件作为MIB数据存储

from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdrsp, context
from pysnmp.carrier.asynsock.dgram import udp
from pysnmp.smi import instrum, error
from pysnmp.proto.api import v2c

snmpEngine = engine.SnmpEngine()

config.addSocketTransport(
    snmpEngine,
    udp.domainName,
    udp.UdpTransport().openServerMode(('127.0.0.1', 1161))
)

config.addV1System(snmpEngine, 'my-area', 'public', contextName='my-context')

config.addVacmUser(snmpEngine, 2, 'my-area', 'noAuthNoPriv', (1,3,6), (1,3,6))

snmpContext = context.SnmpContext(snmpEngine)

class FileInstrumController(instrum.AbstractMibInstrumController):
    def readVars(self, vars, acInfo=(None, None)):
        try:
            return [ (o,v2c.OctetString(open('/tmp/%s.txt' % o, 'r').read())) for o,v in vars ]
        except IOError:
            raise error.SmiError

    def writeVars(self, vars, acInfo=(None, None)):
        try:
            for o,v in vars:
                open('/tmp/%s.txt' % o, 'w').write(str(v))
            return vars
        except IOError:
            raise error.SmiError

snmpContext.registerContextName(
    v2c.OctetString('my-context'),          # Context Name
    FileInstrumController()                 # Management Instrumentation
)

cmdrsp.GetCommandResponder(snmpEngine, snmpContext)
cmdrsp.SetCommandResponder(snmpEngine, snmpContext)

snmpEngine.transportDispatcher.jobStarted(1)

try:
    snmpEngine.transportDispatcher.runDispatcher()
except:
    snmpEngine.transportDispatcher.closeDispatcher()
    raise

请记住,此脚本只是您的入门级脚本,它不能处理某些特殊情况。

和。pysnmp命令响应程序代码的工作方式类似于charmI checkd命令响应程序脚本,但我的目标是从txt文件中读取OID,并回复get/getnext etc请求。若set请求出现,那个么它应该在文件中写入OID。我不知道命令响应程序是如何读取OID和从何处读取的,其中MIB通过
mibBuilder.importSymbols('SNMP-V2-SMI')
加载,并将MIB转换为pysnmp格式
smidump-f python | libsmi2pysnmp>
我检查了命令响应程序脚本,但我的目标是从txt文件读取OID并回复get/getnext etc请求。若set请求出现,那个么它应该在文件中写入OID。我不知道命令响应程序如何读取OID以及从何处读取。上面的脚本将值写入以OID命名的文本文件(in/tmp),并在GET时从中读取值。这发生在readVars()和writeVars()方法中。这似乎有点令人困惑。我不是Python程序员,但上面的代码似乎是1。打开TCP套接字2。发送SNMP get请求这两个请求都与SNMP代理无关。在回答有关SNMP的问题之前,请阅读相关RFC(例如1905),以了解一些基本的SNMP知识。