summaryrefslogtreecommitdiff
path: root/examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py
diff options
context:
space:
mode:
authorelie <elie>2013-03-16 17:05:46 +0000
committerelie <elie>2013-03-16 17:05:46 +0000
commitc4ada8eada8b4ea59a4bbb7d9c6123199d51917a (patch)
tree536f717c2f9a628c06684bb713b556705ff4671e /examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py
parent19698bc00888b4cc59e0cec603a752c2e95fe849 (diff)
downloadpysnmp-c4ada8eada8b4ea59a4bbb7d9c6123199d51917a.tar.gz
a dozen of lightweight Twisted-based example scripts replaced more
complex example implementations used previously.
Diffstat (limited to 'examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py')
-rw-r--r--examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py b/examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py
new file mode 100644
index 0000000..46eb0d3
--- /dev/null
+++ b/examples/v3arch/twisted/manager/cmdgen/getnext-v2c-from-specific-address.py
@@ -0,0 +1,101 @@
+#
+# GETNEXT Command Generator
+#
+# Send a series of SNMP GETNEXT requests
+# with SNMPv2c, community 'public'
+# using Twisted framework for network transport
+# over IPv4/UDP
+# to an Agent at 127.0.0.1:161
+# sending packets from local interface 127.0.0.1, local port 1024
+# for two OIDs in tuple form
+# stop on end-of-mib condition for both OIDs
+#
+# This script performs similar to the following Net-SNMP command:
+#
+# $ snmpwalk -v2c -c public -ObentU 127.0.0.1 1.3.6.1.2.1.1 1.3.6.1.4.1.1
+#
+from twisted.internet import reactor, defer
+from pysnmp.entity import engine, config
+from pysnmp.entity.rfc3413.twisted import cmdgen
+from pysnmp.proto import rfc1905
+from pysnmp.carrier.twisted import dispatch
+from pysnmp.carrier.twisted.dgram import udp
+
+# Create SNMP engine instance
+snmpEngine = engine.SnmpEngine()
+
+# Instantiate and register Twisted dispatcher at SNMP engine
+snmpEngine.registerTransportDispatcher(dispatch.TwistedDispatcher())
+
+#
+# SNMPv2c setup
+#
+
+# SecurityName <-> CommunityName mapping
+config.addV1System(snmpEngine, 'my-area', 'public')
+
+# Specify security settings per SecurityName (SNMPv1 - 0, SNMPv2c - 1)
+config.addTargetParams(snmpEngine, 'my-creds', 'my-area', 'noAuthNoPriv', 1)
+
+#
+# Setup transport endpoint and bind it with security settings yielding
+# a target name
+#
+
+# UDP/IPv4
+config.addSocketTransport(
+ snmpEngine,
+ udp.domainName,
+ udp.UdpTwistedTransport().openClientMode(('127.0.0.1', 1024))
+)
+config.addTargetAddr(
+ snmpEngine, 'my-router',
+ udp.domainName, ('127.0.0.1', 161),
+ 'my-creds'
+)
+
+# Error/response receiver
+def cbFun(cbCtx):
+ (errorIndication, errorStatus, errorIndex, varBindTable) = cbCtx
+ if errorIndication:
+ print(errorIndication)
+ elif errorStatus:
+ print('%s at %s' % (
+ errorStatus.prettyPrint(),
+ errorIndex and varBindTable[-1][int(errorIndex)-1][0] or '?'
+ )
+ )
+ else:
+ for varBindRow in varBindTable:
+ for oid, val in varBindRow:
+ print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
+
+ # Stop reactor when we are done walking (optional)
+ for oid, val in varBindRow:
+ if not val.isSameTypeWith(rfc1905.endOfMibView):
+ break
+ else:
+ reactor.stop()
+ return
+
+
+ # Re-create deferred for next GETNEXT iteration
+ df = defer.Deferred()
+ df.addCallback(cbFun)
+ return df # This also indicates that we wish to continue walking
+
+ # Stop reactor on SNMP error (optional)
+ reactor.stop()
+
+# Prepare request to be sent yielding Twisted deferred object
+df = cmdgen.NextCommandGenerator().sendReq(
+ snmpEngine,
+ 'my-router',
+ ( ('1.3.6.1.2.1.1', None), ('1.3.6.1.4.1.1', None) )
+)
+
+# Register error/response receiver function at deferred
+df.addCallback(cbFun)
+
+# Run Twisted main loop
+reactor.run()