Some python code snippets I hacked while playing with SNMP. I’ve used PySNMP python module.
Script to enumerate network interfaces.
#!/usr/bin/env python from pysnmp.entity.rfc3413.oneliner import cmdgen host='localhost' class Network: def __init__(self,pid): self.values = [] self.values.append(pid) def __str__(self): return str(self.values[0]) def set(self,id,value): self.values.insert(id-1,value) def get_name(self): return self.values[1] def get_mtu(self): return self.values[3] def get_speed(self): return self.values[4] def get_mac(self): return self.values[5] def get_admin_status(self): return self.values[6] def get_oper_status(self): return self.values[7] def get_last_change(self): return self.values[8] def get_octets_in(self): return self.values[9] def get_octets_out(self): return self.values[10]ls errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().nextCmd( cmdgen.CommunityData('test-agent','public'), cmdgen.UdpTransportTarget((host, 161)), (1,3,6,1,2,1,2,2,1)) networks = dict() for varBT in varBinds: key = varBT[0][0] value = varBT[0][1] if(key[10] in networks): networks[key[10]].set(key[9],value) else: networks[key[10]] = Network(key[10]) for netid in networks: net = networks[netid] print netid, net.get_name(), net.get_mtu(), net.get_speed(), net.get_octets_in()
Script to generate list of softwares installed.
#!/usr/bin/env python from pysnmp.entity.rfc3413.oneliner import cmdgen host='localhost' errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().nextCmd( cmdgen.CommunityData('test-agent','public'), cmdgen.UdpTransportTarget((host, 161)), (1,3,6,1,2,1,25,6,3,1,2)) for varBT in varBinds: key = varBT[0][0] value = varBT[0][1] print repr(key[11]).rjust(6), value
Script to print system information
#!/usr/bin/env python from pysnmp.entity.rfc3413.oneliner import cmdgen host='localhost' class SystemInformation: def __init__(self): self.values = [] def __str__(self): return str(self.values[0]) def set(self,id,value): self.values.insert(id-1,value) def get_uptime(self): return self.values[0] def get_system_date(self): return self.values[1] def get_load_device(self): return self.values[2] def get_cmd_line(self): return self.values[3] def get_num_users(self): return self.values[4] def get_num_procs(self): return self.values[5] def get_max_procs(self): return self.values[6] def get_max_mem(self): return self.values[7] errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().nextCmd( cmdgen.CommunityData('test-agent','public'), cmdgen.UdpTransportTarget((host, 161)), (1,3,6,1,2,1,25,1)) sysinfo = SystemInformation() for varBT in varBinds: key = varBT[0][0] value = varBT[0][1] sysinfo.set(key[8], value) print "Users logged in: ", sysinfo.get_num_users() print "Processes running: ", sysinfo.get_num_procs() print "Command Line: ", sysinfo.get_cmd_line()
A stripped down ‘ps’ using PySNMP
#!/usr/bin/env python # A stripped down 'ps' using SNMP in Python from pysnmp.entity.rfc3413.oneliner import cmdgen host='localhost' class Process: def __init__(self,pid): self.values = [] self.values.append(pid) def __str__(self): return str(self.values[0]) def set(self,id,value): self.values.insert(id-1,value) def get_name(self): return self.values[1] def get_path(self): return self.values[3] def get_cmdline(self): return self.values[4] errorIndication, errorStatus, errorIndex, varBinds = cmdgen.CommandGenerator().nextCmd( cmdgen.CommunityData('test-agent','public'), cmdgen.UdpTransportTarget((host, 161)), (1,3,6,1,2,1,25,4,2,1)) processes = dict() for varBT in varBinds: key = varBT[0][0] value = varBT[0][1] if(key[11] in processes): processes[key[11]].set(key[10],value) else: processes[key[11]] = Process(key[11]) for pid in processes: proc = processes[pid] print pid, proc.get_name(), proc.get_path(), proc.get_cmdline()