Lightweight synchronous SNMPv1 Client implemented as a PySNMP wrapper optimized for sequential queries
- Synchronous API for straightforward SNMPv1 GET operations
- Lightweight wrapper around PySNMP's core components
- Can be used to interface Epson printers
pip install py-snmp-sync
from py_snmp_sync import (
SyncUdpTransportTarget, sync_get_cmd, ObjectIdentity, CommunityData
)
target = SyncUdpTransportTarget(('demo.pysnmp.com', 161))
oid = ObjectIdentity('1.3.6.1.2.1.1.1.0')
# Perform SNMP GET request
error, status, index, binds = sync_get_cmd(
CommunityData("public", mpModel=0),
target,
oid
)
if not error and not status:
for name, value in binds:
print(f"{name.prettyPrint()} = {value.prettyPrint()}")
transport = SyncUdpTransportTarget(
(host, 161),
timeout=2,
retries=3
)
community = CommunityData("public", mpModel=0) # SNMPv1
timeout
: Response wait timeout (seconds)retries
: Number of retry attempts
Alternatively, community
can be a string (e.g., "public"
).
oid
can be an ObjectIdentity()
(e.g., ObjectIdentity("SNMPv2-MIB", "sysDescr", 0)
or ObjectIdentity('1.3.6.1.2.1.1.1.0')
), or a string (e.g., "1.3.6.1.2.1.1.1.0"
).
sync_get_cmd()
returns a tuple similar to pysnmp get_cmd()
: (error_indication, error_status, error_index, var_binds)
and supports multiple OIDs per request.
oids = [
ObjectIdentity('1.3.6.1.2.1.1.1.0'),
ObjectIdentity('1.3.6.1.2.1.1.5.0')
]
with SyncUdpTransportTarget(('device-ip', 161)) as transport:
for oid in oids:
error, status, _, binds = sync_get_cmd(community, transport, oid)
# Handle response
Contributions welcome! Please follow standard guidelines:
-
Fork the repository
-
Create a feature branch
-
Submit a Pull Request
EUPL-1.2 License - See LICENSE for details.