Changelog
All notable changes to this project will be documented here.
[1.4.0] - 2026-02-25
Added
SNMPv1 Trap Support (RFC 1157)
Manager.send_trap()now supportsversion=1with enterprise OID, agent address, generic/specific trap typesencode_snmp_trap_v1()Rust binding for v1 Trap-PDU (0xA4 tag)TrapReceiveraccepts v1 traps with enterprise, agent_addr, generic_trap, specific_trap fields
TCP Transport (RFC 3430)
TcpTransportclass with 4-byte big-endian length-prefix framingManager(transport="tcp")parameter for TCP connections
IPv6 Transport
- Dual-stack UDP and TCP transport (IPv4 + IPv6)
TrapReceiversupports::bind for dual-stack listening
Synchronous API
SyncManager— blocking wrapper with persistent background uvloop thread- Context manager support (
with SyncManager(...) as mgr) - All Manager operations:
get,get_many,set,walk,bulk_walk,get_table,send_trap,send_inform
SNMPv3 TrapReceiver
TrapReceiver.add_user(V3User)for multi-user v3 trap receiving- USM key derivation and caching per (engine_id, user_name)
- Auth/priv decryption for incoming v3 traps and informs
V3Userdataclass for credential managementTrapMessageextended with v3 fields: engine_id, user_name, context_name, msg_id
Notification Filtering
TrapFilterdataclass with source, community, OID prefix, and deny list filters- OID prefix matching uses
Oid.starts_with()(not string prefix) TrapReceiver.add_filter(TrapFilter)integration
Rust Bindings
decode_snmp_v3_message()— generic v3 message decoder with auth/priv supportencode_snmp_trap_v1()— v1 trap PDU encoding
[1.3.0] - 2026-02-22
Added
Manager Trap/Inform Support
Manager.send_trap()— fire-and-forget SNMPv2c trap sendingManager.send_inform()— SNMPv2c InformRequest with Response ACK_build_trap_varbinds()helper for sysUpTime + snmpTrapOID + user varbinds
TrapReceiver
- Async UDP listener for incoming traps and informs
- Async iterator protocol (
async for msg in receiver) - Auto-ACK for InformRequests (RFC 3416)
TrapMessagedataclass with parsed trap OID, uptime, varbinds, and source- Filters non-trap PDU types (GET/SET/etc.)
Table Operations
Manager.get_table()— GETBULK-based SNMP table walks- Column filtering via
columnsparameter - Returns
dict[tuple[int, ...], dict[int, Value]]indexed by row/column
Concurrent Polling
poll_many()async generator for polling multiple targetsPollTargetdataclass with per-target configuration (host, port, community, v3 credentials)PollResultdataclass with target, OID, value, and error fields- Semaphore-bounded concurrency with per-target error isolation
Rust Bindings
encode_snmp_trap_v2c()/encode_snmp_inform_v2c()— trap/inform PDU encodingencode_snmp_response_v2c()— response PDU encoding (for inform ACKs)decode_snmp_message()— generic SNMP message decoder (version, community, PDU type, varbinds)
CI
- Test matrix expanded to Python 3.11, 3.12, 3.13, 3.14
Fixed
Value.__str__and__repr__now work correctly in Python (PyO3 complex enumfmt::Displaywas not auto-wired)- Manager exception checks use equality comparison instead of string matching
- Parenthesized multiple exception types for Python 3.11 compatibility
[1.2.1] - 2026-02-19
Changed
- Minimum Python version lowered from 3.14 to 3.11
[1.2.0] - 2026-02-11
Added
SNMPv3 Security (USM)
- Full RFC 3414 (USM), RFC 3826 (AES), RFC 7860 (HMAC-SHA-2) implementation
- Authentication: HMAC-MD5-96, HMAC-SHA-96, HMAC-SHA-224/256/384/512
- Privacy: DES-CBC, AES-128-CFB encryption/decryption
- Key derivation: password_to_key (RFC 3414 A.2.1), localize_key (RFC 3414 A.2.2)
- Automatic engine discovery on connect for SNMPv3
Manager SNMPv3 Support
Manager(version=3, user=..., auth_protocol=..., auth_password=..., priv_protocol=..., priv_password=...)- authPriv, authNoPriv, and noAuthNoPriv security levels
- Automatic engine ID/boots/time discovery via Report PDU
- Localized key derivation from passwords
- All operations (get, set, walk, bulk_walk) work with SNMPv3
Rust Crypto Modules
auth.rs- HMAC authentication with all 6 hash algorithmsprivacy.rs- DES-CBC and AES-CFB-128 encrypt/decryptdiscovery.rs- Engine discovery helpers- Secure v3 encode/decode PyO3 bindings
[1.1.0] - 2026-02-08
Added
SNMP Manager API
Managerclass for querying SNMP devicesget(),get_many(),get_next(),get_bulk()operationswalk()async iterator for traversing OID subtreesset()for SNMPv2c write operations- Full SNMPv1/v2c/v3 support with authentication and privacy
- UDP transport with configurable timeouts and retries
- Async context manager for connection lifecycle
Manager PDUs (RFC 3411-3418)
- SNMP GET/GETNEXT/GETBULK/SET request encoding
- SNMPv3 security model with USM
- Response decoding with error handling
ASN.1 BER Encoding
- Complete BER encoder for SNMP message construction
- High-performance Rust implementation
Exception Hierarchy for Manager
NoSuchObjectError,NoSuchInstanceError,EndOfMibViewErrorGenericErrorwith status and index
Performance
- 170,910 SNMP GET requests/sec
- 108,857 SNMPv3 requests/sec
- 389,342 AgentX PDUs/sec
- 127x faster BER encoding than pure Python
Documentation
- Redesigned landing page with split layout
- Interactive code snippet with Manager and Agent examples
- One-click install command copy
Changed
- All Python class attributes are now public (removed underscore prefix)
Manager:host,port,community,version,timeout,retries,transportAgent:agent_id,socket_path,timeout,registrations,protocolProtocol:session_id,transaction_id,packet_idUdpTransport:host,port,timeout,retries,transport,protocol
[1.0.1] - 2026-01-23
Fixed
- README images now use raw GitHub URLs for PyPI compatibility
[1.0.0] - 2026-01-22
Added
Rust Core
Oidtype with parsing, comparison, parent/child operations- Radix trie for O(1) OID lookups
- All SNMP value types (Integer, OctetString, Counter32, Counter64, Gauge32, TimeTicks, IpAddress, ObjectIdentifier, Opaque)
- Complete AgentX PDU encoding/decoding (Open, Close, Register, Unregister, Get, GetNext, GetBulk, TestSet, CommitSet, UndoSet, CleanupSet, Notify, Ping, Response)
- Optional parallel encoding with rayon
Python Agent API
Agentclass with async/sync entry pointsUpdaterbase class with allset_*methodsSetHandlerfor SNMP SET operations (test/commit/undo/cleanup)- Typed exception hierarchy (
SnmpkitError,ConnectionError,RegistrationError, etc.) - SNMP context support
- Automatic reconnection on connection loss
- uvloop integration for high performance
Performance
- PDU encoding 11.5x faster than pyagentx3
- Value creation 6.4x faster than pyagentx3
- OID parsing 1.5x faster than pyagentx3
Changed
- API uses instance-based registration (
agent.register(oid, MyUpdater())) instead of class-based
Technical
- Rust 1.83.0+ required
- Python 3.14+ required
- PyO3 bindings for Python/Rust interop
Last updated on