lizh 发表于 2018-8-8 11:51:25

snmp discovery with python-itnihao的运维技术博客

  snmp discovery with python
  


[*]#!/usr/bin/env python
[*]from processing import Process, Queue, Pool
[*]import time
[*]import subprocess
[*]from IPy import IP
[*]import sys
[*]from snmp import Snmp
[*]
[*]q = Queue()
[*]oq = Queue()
[*]#ips = IP("10.0.1.0/24")
[*]ips = ["10.10.10.28","10.10.10.29","10.10.10.30","10.10.10.31","10.10.10.32","10.10.10.33","10.10.10.34","10.10.10.35","10.10.10.36","10.10.10.37","10.10.10.38","10.10.10.39"]
[*]num_workers = 10
[*]
[*]class HostRecord(object):
[*]    """Record for Hosts"""
[*]    def __init__(self, ip=None, mac=None, snmp_response=None):
[*]      self.ip = ip
[*]      self.mac = mac
[*]      self.snmp_response = snmp_response
[*]    def __repr__(self):
[*]      return "" % (self.ip,
[*]                                          self.mac,
[*]                                          self.snmp_response)
[*]
[*]def f(i,q,oq):
[*]    while True:
[*]      time.sleep(.1)
[*]      if q.empty():
[*]            sys.exit()
[*]            print "Process Number: %s Exit" % i
[*]      ip = q.get()
[*]      print "Process Number: %s" % i
[*]      ret = subprocess.call("ping -c 1 %s" % ip,
[*]                        shell=True,
[*]                        stdout=open('/dev/null', 'w'),
[*]                        stderr=subprocess.STDOUT)
[*]      if ret == 0:
[*]            print "%s: is alive" % ip
[*]            oq.put(ip)
[*]      else:
[*]            print "Process Number: %s didn't find a response for %s " % (i, ip)
[*]            pass
[*]
[*]def snmp_query(i,out):
[*]    while True:
[*]      time.sleep(.1)
[*]      if out.empty():
[*]            sys.exit()
[*]            print "Process Number: %s" % i
[*]      ipaddr = out.get()
[*]      s = Snmp()
[*]      h = HostRecord()
[*]      h.ip = ipaddr
[*]      h.snmp_response = s.query()
[*]      print h
[*]      return h
[*]try:
[*]    q.putmany(ips)
[*]
[*]finally:
[*]    for i in range(num_workers):
[*]      p = Process(target=f, args=)
[*]      p.start()
[*]    for i in range(num_workers):
[*]      pp = Process(target=snmp_query, args=)
[*]      pp.start()
[*]
[*]print "main process joins on queue"
[*]p.join()
[*]#while not oq.empty():
[*]#    print "Validated", oq.get()
[*]
[*]
[*]print "Main Program finished"
  
页: [1]
查看完整版本: snmp discovery with python-itnihao的运维技术博客