Skip to main content

A modern SNMP runtime toolkit with optional compiled-JSON MIB enrichment

Project description

trishul-snmp

CI Python License: MIT GitHub Stars GitHub Forks GitHub Issues

A modern SNMP runtime, manager, and simulator toolkit written in Python.

trishul-snmp (tsnmp) is a package-first SNMP runtime for manager-side use, notification handling, and narrow simulator-style responder flows. It keeps the protocol runtime independent from MIB compilation and uses compiled JSON artifacts only when symbolic enrichment is desired.

For the canonical tsnmp/tsmi split, tested version pairing, and current ecosystem status, see Ecosystem and Compatibility.

The split with trishul-smi (tsmi) is intentional:

  • tsnmp Runtime, transport, manager API, thin CLI, optional enrichment consumer
  • tsmi Parser/compiler that produces compiled JSON artifacts

The primary product is the importable Python package. The CLI is intentionally thin and secondary.

Features

  • async-first Python API
  • SNMPv2c manager runtime
  • SNMPv3 USM manager runtime (V3Manager; noAuthNoPriv, authNoPriv, authPriv AES-128)
  • read-only operations:
    • get
    • get_next
    • get_bulk
    • walk
    • bulkwalk
  • outbound SNMPv2c trap and inform send
  • outbound SNMPv3 USM trap and inform send (V3Notifier; traps require UsmLocalEngine)
  • inbound SNMPv2c and SNMPv3 USM trap and inform listen (V3NotificationListener handles one configured user)
  • offline SNMPv2c and strict SNMPv3 USM notification decode
  • narrow read-only SNMPv2c responder / simulator
  • simulation rules for dynamic OID values (counters, gauges, uptime, timestamps)
  • bundle-backed auto-population of simulator object sets
  • in-memory MIB bundle iteration and substring search
  • JSON-safe notification event serialization
  • in-tree BER / ASN.1 / SNMPv2c + SNMPv3 wire/security codec
  • UDP transport and request dispatcher
  • optional symbolic translation and display enrichment from compiled JSON MIB artifacts
  • works with numeric OIDs and no MIB bundle loaded
  • live CLI commands cover SNMPv2c plus SNMPv3 manager, notification send, notification listen, and offline decode

Scope

Current main-branch baseline:

  • manager operations plus notification send/listen/decode
  • narrow read-only responder / simulator support
  • SNMPv2c and SNMPv3 USM (noAuthNoPriv, authNoPriv, authPriv AES-128)
  • read-only operations only
  • async-first Python API first, CLI second
  • optional compiled-JSON enrichment via tsmi artifacts
  • no runtime dependency on trishul-smi

Deliberately deferred:

  • raw MIB file or raw MIB directory ingestion
  • pysnmp API compatibility shims
  • direct runtime dependency on the trishul-smi Python package
  • sync wrapper
  • SNMPv1
  • set
  • full agent framework
  • writable responder support
  • compiler workflows inside tsnmp

Installation

pip install trishul-snmp

For SNMPv3 auth/priv support (HMAC and AES-128-CFB encryption):

pip install "trishul-snmp[v3]"

The base package imports without [v3]; only calling auth or priv methods at runtime requires it.

For local development:

pip install -e ".[dev,v3]"

Requires Python >=3.10.

Quick Start

Numeric GET with no bundle:

import asyncio

from trishul_snmp import V2cManager


async def main() -> None:
    async with V2cManager(host="10.0.0.10", community="public") as manager:
        response = await manager.get("1.3.6.1.2.1.1.3.0")
        for varbind in response.varbinds:
            print(varbind.oid_str, varbind.value_type, varbind.display_value)


asyncio.run(main())

Symbolic GET with a compiled JSON bundle:

import asyncio

from trishul_snmp import V2cManager, load_bundle

bundle = load_bundle("./IF-MIB.json")


async def main() -> None:
    async with V2cManager(
        host="10.0.0.10",
        community="public",
        bundle=bundle,
    ) as manager:
        response = await manager.get("IF-MIB::ifDescr.1")
        for varbind in response.varbinds:
            print(varbind.display_name, "=", varbind.display_value)


asyncio.run(main())

SNMPv3 USM GET:

import asyncio

from trishul_snmp import AuthProtocol, UsmUser, V3Manager

user = UsmUser(
    username="monitor",
    auth_protocol=AuthProtocol.SHA256,
    auth_key=b"authpass123",
)


async def main() -> None:
    async with V3Manager(host="10.0.0.10", user=user) as manager:
        response = await manager.get("1.3.6.1.2.1.1.3.0")
        for varbind in response.varbinds:
            print(varbind.oid_str, varbind.value_type, varbind.display_value)


asyncio.run(main())

Current CLI coverage includes SNMPv2c plus SNMPv3 get, getnext, getbulk, walk, bulkwalk, trap, inform, listen, and decode-notification via explicit --snmp-version {2c,3} selection. SNMPv3 listen requires explicit --local-engine-id, --local-engine-boots, and --local-engine-time. SNMPv3 decode-notification requires explicit user/auth/priv inputs.

Documentation

Repository Layout

  • trishul_snmp/ Package source
  • tests/ Test suite
  • docs/ Application and design documentation
  • docs/archive/ Archived planning and historical release notes
  • README.md Repository/GitHub landing page

Community

Canonical package docs live under docs/. GitHub/community entry points live under .github/.

Development

Checks used in this repo:

python3 -m pytest -q
python3 -m ruff check .
python3 -m ruff format --check trishul_snmp tests
python3 -m mypy

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trishul_snmp-0.4.2.tar.gz (152.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trishul_snmp-0.4.2-py3-none-any.whl (68.7 kB view details)

Uploaded Python 3

File details

Details for the file trishul_snmp-0.4.2.tar.gz.

File metadata

  • Download URL: trishul_snmp-0.4.2.tar.gz
  • Upload date:
  • Size: 152.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trishul_snmp-0.4.2.tar.gz
Algorithm Hash digest
SHA256 47b152f50bfef730f2a14721b861b6064abc45529a4ff0438c53ab18f7c65ecb
MD5 29f769038a5fd40f7eb1b1e5ca9fdaa3
BLAKE2b-256 8aa88aaf3c588bde67acd5f2dcf578f3d9153f20e58889de1984a727bf0806ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for trishul_snmp-0.4.2.tar.gz:

Publisher: release.yml on tosumitdhaka/trishul-snmp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file trishul_snmp-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: trishul_snmp-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 68.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trishul_snmp-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 267b2a12247eb99c6d170201af413d9c40b6ddb57b02ab6944c0d3e4ffecbbc4
MD5 013d009fcbf9d74a8709fafaae5ba8e7
BLAKE2b-256 b12b1afcca36af73b217c954e0bc7f8362c554ccd8ad9dcbcb74bd7e57e2df72

See more details on using hashes here.

Provenance

The following attestation bundles were made for trishul_snmp-0.4.2-py3-none-any.whl:

Publisher: release.yml on tosumitdhaka/trishul-snmp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page