Menu

Tree [d9932c] main /
 History

HTTPS access


File Date Author Commit
 .github 2024-09-02 Carlos Carlos [d9932c] 167 investigate arm64 builds for macos (#168)
 docs 2024-08-30 Carlos Carlos [555f61] Release/v1.0.0rc4 (#164)
 ezsnmp 2024-09-01 Carlos Carlos [5305b8] Cibuildwheel/fix the pipeline for ga (#165)
 images 2024-09-01 Carlos Carlos [5305b8] Cibuildwheel/fix the pipeline for ga (#165)
 integration_tests 2024-06-14 Carlos Carlos [bd393c] Manual Pull In (#109)
 sphinx_docs_build 2024-08-30 Carlos Carlos [555f61] Release/v1.0.0rc4 (#164)
 tests 2024-08-29 jeffry jeffry [f386cf] feat: add type annotations for internal code (#...
 .gitattributes 2024-01-30 Carlos Carlos [bce1fc] Cibuildwheel (#20)
 .gitignore 2024-01-30 Carlos Carlos [bce1fc] Cibuildwheel (#20)
 CHANGELOG.rst 2023-12-29 Carlos Carlos [a35428] Feature/rename stuff (#2)
 LICENSE 2023-12-29 Carlos Carlos [a35428] Feature/rename stuff (#2)
 MANIFEST.in 2023-12-29 Carlos Carlos [a35428] Feature/rename stuff (#2)
 README.rst 2024-09-01 Carlos Carlos [5305b8] Cibuildwheel/fix the pipeline for ga (#165)
 pyproject.toml 2024-09-02 Carlos Carlos [d9932c] 167 investigate arm64 builds for macos (#168)
 requirements.txt 2024-08-28 dependabot[bot] dependabot[bot] [fa5aa1] Bump setuptools from 73.0.1 to 74.0.0 (#162)
 setup.cfg 2024-09-01 Carlos Carlos [5305b8] Cibuildwheel/fix the pipeline for ga (#165)
 setup.py 2024-09-01 Carlos Carlos [5305b8] Cibuildwheel/fix the pipeline for ga (#165)

Read Me

Ez SNMP

<object data="https://img.shields.io/badge/code%20style-black-000000.svg" type="image/svg+xml">Python Code Style</object> <object data="https://github.com/carlkidcrypto/ezsnmp/actions/workflows/black.yml/badge.svg" type="image/svg+xml">Black</object> <object data="https://github.com/carlkidcrypto/ezsnmp/actions/workflows/sphinx_build.yml/badge.svg" type="image/svg+xml">Pull Request Sphinx Docs Check</object> <object data="https://github.com/carlkidcrypto/ezsnmp/actions/workflows/build_and_publish_to_pypi.yml/badge.svg" type="image/svg+xml">PyPI Distributions</object> <object data="https://github.com/carlkidcrypto/ezsnmp/actions/workflows/build_and_publish_to_test_pypi.yml/badge.svg" type="image/svg+xml">TestPyPI Distributions</object> <object data="https://github.com/carlkidcrypto/ezsnmp/actions/workflows/tests.yml/badge.svg" type="image/svg+xml">Tests</object> <object data="https://img.shields.io/badge/license-BSD-blue.svg" type="image/svg+xml">License</object>

Ez SNMP Logo

Artwork courtesy of Open Clip Art Library

Introduction

Ez SNMP is a fork of Easy SNMP

Why Another Library?

  • Simple, because the maintainer of Easy SNMP seems to have abandoned the project and or isn't actively working on it.
  • This version (Ez SNMP) will attempt to remain up to date with Python versions that are supported by Python and net-snmp versions that are supported by Net-SNMP

How to Support This Project?

Buy Me A Coffee.

Use this link to buy me a coffee!

Quick Start

There are primarily two ways you can use the Ez SNMP library:

1. By using a Session object which is most suitable when you want to request multiple pieces of SNMP data from a source:

from ezsnmp import Session

# Create an SNMP session to be used for all our requests
session = Session(hostname='localhost', community='public', version=2)

# You may retrieve an individual OID using an SNMP GET
location = session.get('sysLocation.0')

# You may also specify the OID as a tuple (name, index)
# Note: the index is specified as a string as it can be of other types than
# just a regular integer
contact = session.get(('sysContact', '0'))

# And of course, you may use the numeric OID too
description = session.get('.1.3.6.1.2.1.1.1.0')

# Set a variable using an SNMP SET
session.set('sysLocation.0', 'The SNMP Lab')

# Perform an SNMP walk
system_items = session.walk('system')

# Each returned item can be used normally as its related type (str or int)
# but also has several extended attributes with SNMP-specific information
for item in system_items:
    print '{oid}.{oid_index} {snmp_type} = {value}'.format(
        oid=item.oid,
        oid_index=item.oid_index,
        snmp_type=item.snmp_type,
        value=item.value
    )

2. By using Ez SNMP via its simple interface which is intended for one-off operations (where you wish to specify all details in the request):

from ezsnmp import snmp_get, snmp_set, snmp_walk

# Grab a single piece of information using an SNMP GET
snmp_get('sysDescr.0', hostname='localhost', community='public', version=1)

# Perform an SNMP SET to update data
snmp_set(
    'sysLocation.0', 'My Cool Place',
    hostname='localhost', community='public', version=1
)

# Perform an SNMP walk
snmp_walk('system', hostname='localhost', community='public', version=1)

Documentation

Please check out the Ez SNMP documentation at. This includes installation instructions for various operating systems.

You may generate the documentation as follows:

# Install Sphinx
# See this website for install instructions https://www.sphinx-doc.org/en/master/usage/installation.html

# Build the documentation into static HTML pages
cd sphinx_docs_build
make html

Acknowledgments

I'd like to say thanks to the following folks who have made this project possible:

  • Giovanni Marzot: the original author
  • ScienceLogic, LLC: sponsored the initial development of this module
  • Wes Hardaker and the net-snmp-coders: for their hard work and dedication
  • fgimian and nnathan: the original contributors to this codebase
  • Kent Coble: who was the most recent maintainer. Easy SNMP

Running Tests

Tests use Pytest. You can run them with the following on Linux:

git clone https://github.com/ezsnmp/ezsnmp.git;
cd ezsnmp;
sudo apt update && sudo apt upgrade -y;
sudo apt install -y snmp snmpd libsnmp-dev libperl-dev snmp-mibs-downloader valgrind;
sudo apt install -y python3-pip python3-dev  python3-setuptools gdb -y;
sudo systemctl stop snmpd;
sudo mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig;
sudo cp tests/snmpd.conf /etc/snmp/snmpd.conf;
sudo download-mibs;
mkdir -p -m 0755 ~/.snmp;
echo 'mibs +ALL' > ~/.snmp/snmp.conf;
sudo systemctl start snmpd;
rm -drf build/ dist/ ezsnmp.egg-info;
python3 -m pip install -r requirements.txt;
python3 setup.py build && python3 -m pip install -e . && python3 -m pytest .;
# Bottom one for debug. Replace the top one with it if needed.
# python3 setup.py build && python3 -m pip install -e . && gdb -ex run -ex bt -ex quit --args python3 -m pytest .;
# Bottom one for valgrind. Replace the top one with it if needed.
# python3 setup.py build && python3 -m pip install -e . && valgrind --tool=memcheck --leak-check=full --show-leak-kinds=definite,indirect,possible python3 -m pytest .
# Bottom one for valgrind using helgrind. Replace the top one with it if needed.
# python3 setup.py build && python3 -m pip install -e . && valgrind --tool=helgrind --free-is-write=yes python3 -m pytest .

On MacOS

git clone https://github.com/ezsnmp/ezsnmp.git;
cd ezsnmp;
sudo mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig;
sudo cp tests/snmpd.conf /etc/snmp/snmpd.conf;
sudo launchctl unload /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist;
sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist;
rm -drf build/ dist/ ezsnmp.egg-info;
python3 setup.py build && python3 -m pip install -e . && python3 -m pytest .;

Running cibuildwheels

For Linux builds on a Linux machine

clear && rm -drf wheelhouse/ build/ ezsnmp.egg-info/  && python3 -m cibuildwheel --output-dir wheelhouse --platform linux

For MacOS builds on a MacOS machine

clear && rm -drf wheelhouse/ build/ ezsnmp.egg-info/  && python3 -m cibuildwheel --output-dir wheelhouse --platform macos

License

Ez SNMP is released under the BSD license. Please see the LICENSE file for more details.