Spaces:
No application file
No application file
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.") |