from snmp import CommunityData, ContextData, SNMPv1, SNMPv2c, SNMPv3 from snmp import Version from ipaddress import IPv4Network import socket def get_printers(community="public", ip_range="192.168.251.0/24", version=Version.V1): oids = { "printer_name": "1.3.6.1.2.1.25.3.2.1.3", "printer_status": "1.3.6.1.2.1.25.3.5.1.1", "printer_location": "1.3.6.1.2.1.1.6" } printers = [] for ip in IPv4Network(ip_range): ip_str = str(ip) if ip_str == "192.168.251.249": continue try: if version == Version.V1: snmp_client = SNMPv1(CommunityData(community)) elif version == Version.V2c: snmp_client = SNMPv2c(CommunityData(community)) else: # Version 3 snmp_client = SNMPv3(ContextData()) printer_info = {} for key, oid in oids.items(): try: result = snmp_client.get(oid, ip_str) printer_info[key] = result.value except socket.timeout: #print(f"Timeout for {ip_str}") break except Exception as e: #print(f"Error querying {ip_str}: {e}") break if printer_info: printer_info["ip"] = ip_str printers.append(printer_info) except Exception as e: # print(f"SNMP error for {ip_str}: {e}") # Handle SNMP errors pass return printers if __name__ == "__main__": printers = get_printers() if printers: for printer in printers: print(printer) else: print("No printers found.")