Example #1
0
 def walk(self, host, starting_oid=None, port=161, timeout=10, max_initial_failures=1, max_consequtive_failures=3):
     """Walks the MIB from the given starting oid, returns a list of (oid, object) tuples"""
     # TODO: perhaps an OrderedDict is more appropriate?
     responses = []
     attempts_remaining = max_initial_failures
     datagram = SNMPDatagram(pdu=GetNextRequest.from_oid(starting_oid))
     while attempts_remaining:
         future = self.sendto(datagram, host, port)
         try:
             response = yield from asyncio.wait_for(future, timeout=timeout)
         except asyncio.TimeoutError:
             logging.debug("Timeout for GetNextRequest(%s, %s)", host, datagram.pdu.oid)
             if isinstance(attempts_remaining, int):
                 attempts_remaining -= 1
         else:
             assert isinstance(response.pdu, GetResponse)
             attempts_remaining = max_consequtive_failures
             logging.debug("Response from host %s: %s=%s", host, response.pdu.oid, response.pdu.response)
             if datagram.pdu.oid == response.pdu.oid:
                 # end of mib condition
                 break
             else:
                 responses.append((response.pdu.oid, response.pdu.response))
                 pdu = GetNextRequest.from_oid(response.pdu.oid)
                 datagram = SNMPDatagram(pdu=pdu)
     # else:
     #     raise ExceededRetries('Maximum retries exceeded')
     return responses
Example #2
0
 def walk(self,
          host,
          starting_oid=None,
          port=161,
          timeout=10,
          max_initial_failures=1,
          max_consequtive_failures=3):
     """Walks the MIB from the given starting oid, returns a list of (oid, object) tuples"""
     # TODO: perhaps an OrderedDict is more appropriate?
     responses = []
     attempts_remaining = max_initial_failures
     datagram = SNMPDatagram(pdu=GetNextRequest.from_oid(starting_oid))
     while attempts_remaining:
         future = self.sendto(datagram, host, port)
         try:
             response = yield from asyncio.wait_for(future, timeout=timeout)
         except asyncio.TimeoutError:
             logging.debug("Timeout for GetNextRequest(%s, %s)", host,
                           datagram.pdu.oid)
             if isinstance(attempts_remaining, int):
                 attempts_remaining -= 1
         else:
             assert isinstance(response.pdu, GetResponse)
             attempts_remaining = max_consequtive_failures
             logging.debug("Response from host %s: %s=%s", host,
                           response.pdu.oid, response.pdu.response)
             if datagram.pdu.oid == response.pdu.oid:
                 # end of mib condition
                 break
             else:
                 responses.append((response.pdu.oid, response.pdu.response))
                 pdu = GetNextRequest.from_oid(response.pdu.oid)
                 datagram = SNMPDatagram(pdu=pdu)
     # else:
     #     raise ExceededRetries('Maximum retries exceeded')
     return responses
Example #3
0
 def get_next(self, host, oid=system, port=161):
     """Creates GetNextResponse PDU / datagram and returns a Future"""
     pdu = GetNextRequest.from_oid(oid)
     datagram = SNMPDatagram(pdu=pdu)
     return self.sendto(datagram, host, port)
Example #4
0
 def get_next(self, host, oid=system, port=161):
     """Creates GetNextResponse PDU / datagram and returns a Future"""
     pdu = GetNextRequest.from_oid(oid)
     datagram = SNMPDatagram(pdu=pdu)
     return self.sendto(datagram, host, port)