diff options
author | elie <elie> | 2012-07-21 08:34:56 +0000 |
---|---|---|
committer | elie <elie> | 2012-07-21 08:34:56 +0000 |
commit | 8a21462859b8956a29801c11039c7e5590ae31ca (patch) | |
tree | e6d403efb26f520fd08bef61bf8372455ad9bd30 /examples/v1arch/asyncore/manager | |
parent | ba5d9c3d219bcb0ce9ffa0c2dbf064eee0a45c09 (diff) | |
download | pysnmp-git-8a21462859b8956a29801c11039c7e5590ae31ca.tar.gz |
more transports, text OIDs and general comments added
Diffstat (limited to 'examples/v1arch/asyncore/manager')
5 files changed, 114 insertions, 32 deletions
diff --git a/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py b/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py index 2ba0fea9..e5074c87 100644 --- a/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py +++ b/examples/v1arch/asyncore/manager/cmdgen/fetch-scalar-value.py @@ -1,19 +1,20 @@ # GET Command Generator from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher -from pysnmp.carrier.asynsock.dgram import udp +from pysnmp.carrier.asynsock.dgram import udp, udp6, unix from pyasn1.codec.ber import encoder, decoder from pysnmp.proto import api from time import time # Protocol version to use pMod = api.protoModules[api.protoVersion1] +#pMod = api.protoModules[api.protoVersion2c] # Build PDU reqPDU = pMod.GetRequestPDU() pMod.apiPDU.setDefaults(reqPDU) pMod.apiPDU.setVarBinds( - reqPDU, (((1,3,6,1,2,1,1,1,0), pMod.Null('')), - ((1,3,6,1,2,1,1,3,0), pMod.Null(''))) + reqPDU, ( ('1.3.6.1.2.1.1.1.0', pMod.Null('')), + ('1.3.6.1.2.1.1.3.0', pMod.Null('')) ) ) # Build message @@ -22,7 +23,9 @@ pMod.apiMessage.setDefaults(reqMsg) pMod.apiMessage.setCommunity(reqMsg, 'public') pMod.apiMessage.setPDU(reqMsg, reqPDU) -def cbTimerFun(timeNow, startedAt=time()): +startedAt = time() + +def cbTimerFun(timeNow): if timeNow - startedAt > 3: raise Exception("Request timed out") @@ -44,14 +47,44 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, return wholeMsg transportDispatcher = AsynsockDispatcher() -transportDispatcher.registerTransport( - udp.domainName, udp.UdpSocketTransport().openClientMode() - ) + transportDispatcher.registerRecvCbFun(cbRecvFun) transportDispatcher.registerTimerCbFun(cbTimerFun) + +# UDP/IPv4 +transportDispatcher.registerTransport( + udp.domainName, udp.UdpSocketTransport().openClientMode() +) + +# Pass message to dispatcher transportDispatcher.sendMessage( encoder.encode(reqMsg), udp.domainName, ('localhost', 161) - ) +) transportDispatcher.jobStarted(1) + +## UDP/IPv6 (second copy of the same PDU will be sent) +transportDispatcher.registerTransport( + udp6.domainName, udp6.Udp6SocketTransport().openClientMode() +) + +# Pass message to dispatcher +transportDispatcher.sendMessage( + encoder.encode(reqMsg), udp6.domainName, ('::1', 161) +) +transportDispatcher.jobStarted(1) + +## Local domain socket +#transportDispatcher.registerTransport( +# unix.domainName, unix.UnixSocketTransport().openClientMode() +#) +# +# Pass message to dispatcher +#transportDispatcher.sendMessage( +# encoder.encode(reqMsg), unix.domainName, '/tmp/snmp-agent' +#) +#transportDispatcher.jobStarted(1) + +# Dispatcher will finish as job#1 counter reaches zero transportDispatcher.runDispatcher() + transportDispatcher.closeDispatcher() diff --git a/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py b/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py index 1e708213..5c0ea759 100644 --- a/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py +++ b/examples/v1arch/asyncore/manager/cmdgen/getbulk-pull-whole-mib.py @@ -31,15 +31,23 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, wholeMsg, reqPDU=reqPDU, headVars=headVars): while wholeMsg: rspMsg, wholeMsg = decoder.decode(wholeMsg, asn1Spec=v2c.Message()) + rspPDU = v2c.apiMessage.getPDU(rspMsg) + # Match response to request if v2c.apiBulkPDU.getRequestID(reqPDU)==v2c.apiBulkPDU.getRequestID(rspPDU): + # Format var-binds table + varBindTable = v2c.apiBulkPDU.getVarBindTable(reqPDU, rspPDU) + # Check for SNMP errors reported errorStatus = v2c.apiBulkPDU.getErrorStatus(rspPDU) if errorStatus and errorStatus != 2: - raise Exception(errorStatus) - # Format var-binds table - varBindTable = v2c.apiBulkPDU.getVarBindTable(reqPDU, rspPDU) + errorIndex = v2c.apiBulkPDU.getErrorIndex(rspPDU) + print('%s at %s' % (errorStatus.prettyPrint(), + errorIndex and varBindTable[int(errorIndex)-1] or '?')) + transportDispatcher.jobFinished(1) + break + # Report SNMP table for tableRow in varBindTable: for name, val in tableRow: @@ -47,6 +55,7 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, transportAddress, name.prettyPrint(), val.prettyPrint() ) ) + # Stop on EOM for oid, val in varBindTable[-1]: if not isinstance(val, v2c.Null): @@ -69,14 +78,19 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, return wholeMsg transportDispatcher = AsynsockDispatcher() -transportDispatcher.registerTransport( - udp.domainName, udp.UdpSocketTransport().openClientMode() - ) + transportDispatcher.registerRecvCbFun(cbRecvFun) transportDispatcher.registerTimerCbFun(cbTimerFun) + +transportDispatcher.registerTransport( + udp.domainName, udp.UdpSocketTransport().openClientMode() +) transportDispatcher.sendMessage( encoder.encode(reqMsg), udp.domainName, ('localhost', 161) - ) +) transportDispatcher.jobStarted(1) + +# Dispatcher will finish as job#1 counter reaches zero transportDispatcher.runDispatcher() + transportDispatcher.closeDispatcher() diff --git a/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py b/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py index 27e1493c..0b360392 100644 --- a/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py +++ b/examples/v1arch/asyncore/manager/cmdgen/getnext-pull-whole-mib.py @@ -71,14 +71,18 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, return wholeMsg transportDispatcher = AsynsockDispatcher() -transportDispatcher.registerTransport( - udp.domainName, udp.UdpSocketTransport().openClientMode() - ) + transportDispatcher.registerRecvCbFun(cbRecvFun) transportDispatcher.registerTimerCbFun(cbTimerFun) + +transportDispatcher.registerTransport( + udp.domainName, udp.UdpSocketTransport().openClientMode() +) transportDispatcher.sendMessage( encoder.encode(reqMsg), udp.domainName, ('localhost', 161) - ) +) transportDispatcher.jobStarted(1) + transportDispatcher.runDispatcher() + transportDispatcher.closeDispatcher() diff --git a/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py b/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py index eec3731a..247a6346 100644 --- a/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py +++ b/examples/v1arch/asyncore/manager/cmdgen/v2c-set.py @@ -6,7 +6,8 @@ from pysnmp.proto import api from time import time # Protocol version to use -pMod = api.protoModules[api.protoVersion1] +#pMod = api.protoModules[api.protoVersion1] +pMod = api.protoModules[api.protoVersion2c] # Build PDU reqPDU = pMod.SetRequestPDU() @@ -14,8 +15,8 @@ pMod.apiPDU.setDefaults(reqPDU) pMod.apiPDU.setVarBinds( reqPDU, # A list of Var-Binds to SET - (((1,3,6,1,2,1,1,1,0), pMod.OctetString('New system description')), - ((1,3,6,1,2,1,1,3,0), pMod.TimeTicks(12))) + ( ('1.3.6.1.2.1.1.1.0', pMod.OctetString('New system description')), + ('1.3.6.1.2.1.1.3.0', pMod.TimeTicks(12)) ) ) # Build message @@ -24,7 +25,9 @@ pMod.apiMessage.setDefaults(reqMsg) pMod.apiMessage.setCommunity(reqMsg, 'public') pMod.apiMessage.setPDU(reqMsg, reqPDU) -def cbTimerFun(timeNow, startedAt=time()): +startedAt = time() + +def cbTimerFun(timeNow): if timeNow - startedAt > 3: raise Exception("Request timed out") @@ -46,14 +49,22 @@ def cbRecvFun(transportDispatcher, transportDomain, transportAddress, return wholeMsg transportDispatcher = AsynsockDispatcher() -transportDispatcher.registerTransport( - udp.domainName, udp.UdpSocketTransport().openClientMode() - ) + transportDispatcher.registerRecvCbFun(cbRecvFun) transportDispatcher.registerTimerCbFun(cbTimerFun) + +# UDP/IPv4 +transportDispatcher.registerTransport( + udp.domainName, udp.UdpSocketTransport().openClientMode() +) + +# Pass message to dispatcher transportDispatcher.sendMessage( encoder.encode(reqMsg), udp.domainName, ('localhost', 161) - ) +) transportDispatcher.jobStarted(1) + +# Dispatcher will finish as job#1 counter reaches zero transportDispatcher.runDispatcher() + transportDispatcher.closeDispatcher() diff --git a/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py b/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py index 62f81474..cda81a66 100644 --- a/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py +++ b/examples/v1arch/asyncore/manager/ntfrcv/listen-on-ipv4-and-ipv6-interfaces.py @@ -1,6 +1,6 @@ # Notification Receiver (TRAP PDU) from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher -from pysnmp.carrier.asynsock.dgram import udp +from pysnmp.carrier.asynsock.dgram import udp, udp6, unix from pyasn1.codec.ber import decoder from pysnmp.proto import api @@ -51,9 +51,29 @@ def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg): return wholeMsg transportDispatcher = AsynsockDispatcher() + +transportDispatcher.registerRecvCbFun(cbFun) + +# UDP/IPv4 transportDispatcher.registerTransport( udp.domainName, udp.UdpSocketTransport().openServerMode(('localhost', 162)) - ) -transportDispatcher.registerRecvCbFun(cbFun) -transportDispatcher.jobStarted(1) # this job would never finish -transportDispatcher.runDispatcher() +) + +# UDP/IPv6 +transportDispatcher.registerTransport( + udp6.domainName, udp6.Udp6SocketTransport().openServerMode(('::1', 162)) +) + +## Local domain socket +#transportDispatcher.registerTransport( +# unix.domainName, unix.UnixSocketTransport().openServerMode('/tmp/snmp-manager') +#) + +transportDispatcher.jobStarted(1) + +try: + # Dispatcher will never finish as job#1 never reaches zero + transportDispatcher.runDispatcher() +except: + transportDispatcher.closeDispatcher() + raise |