Pysnmp使用指南

在這里插入圖片描述

1. 簡介

pysnmp 是一個純 Python 實現的 SNMP(Simple Network Management Protocol)庫,支持 SNMPv1、SNMPv2c 和 SNMPv3 協議。用于:

  • 查詢(GET)和修改(SET)網絡設備的管理信息。
  • 遍歷(WALK)設備的 MIB(Management Information Base)樹。
  • 實現 SNMP Agent(服務器)或 Manager(客戶端)。

2. 安裝

pip install pysnmp pysnmp-mibs  # 安裝核心庫和 MIB 支持

3. 基本用法

3.1 SNMP GET 請求
from pysnmp.hlapi import *# 定義 SNMP 參數
community = 'public'  # 社區名(SNMPv1/v2c)
ip_address = '192.168.1.1'  # 目標設備 IP
port = 161  # 默認 SNMP 端口
oid = '1.3.6.1.2.1.1.1.0'  # OID(例如:系統描述)# 發起 GET 請求
error_indication, error_status, error_index, var_binds = next(getCmd(SnmpEngine(),CommunityData(community),UdpTransportTarget((ip_address, port), timeout=2, retries=2),ContextData(),ObjectType(ObjectIdentity(oid)))
)# 處理響應
if error_indication:print(f"Error: {error_indication}")
elif error_status:print(f"Error Status: {error_status}")
else:for var_bind in var_binds:print(f"{var_bind[0]} = {var_bind[1]}")

3.2 SNMP WALK 遍歷
from pysnmp.hlapi import *error_indication, error_status, error_index, var_bind_table = next(nextCmd(SnmpEngine(),CommunityData('public'),UdpTransportTarget(('192.168.1.1', 161)),ContextData(),ObjectType(ObjectIdentity('1.3.6.1.2.1.1')),  # 遍歷系統組lexicographicMode=False)  # 按字典順序遍歷
)if error_indication:print(f"Error: {error_indication}")
else:for var_bind_row in var_bind_table:for var_bind in var_bind_row:print(f"{var_bind[0]} = {var_bind[1]}")

3.3 SNMP SET 操作
from pysnmp.hlapi import *error_indication, error_status, error_index, var_binds = next(setCmd(SnmpEngine(),CommunityData('private', mpModel=1),  # 使用寫權限的社區名UdpTransportTarget(('192.168.1.1', 161)),ContextData(),ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.0'), OctetString('NewDeviceName')))
)if error_indication:print(f"Error: {error_indication}")
elif error_status:print(f"SET Error: {error_status}")
else:print("SET 操作成功")

4. SNMPv3 配置

SNMPv3 支持認證和加密:

from pysnmp.hlapi import *user = 'user1'
auth_key = 'authkey123'
priv_key = 'privkey123'error_indication, error_status, error_index, var_binds = next(getCmd(SnmpEngine(),UsmUserData(user,authKey=auth_key,privKey=priv_key,authProtocol=usmHMACSHAAuthProtocol,  # 認證協議privProtocol=usmAesCfb128Protocol),    # 加密協議UdpTransportTarget(('192.168.1.1', 161)),ContextData(),ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')))
)

5. MIB 管理

使用 MIB 名稱代替原始 OID:

from pysnmp.hlapi import *
from pysnmp.smi import compiler# 加載 MIB 文件
compiler.addMibCompiler(compiler.DirMibSource('/path/to/mibs'))
ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0).resolveWithMib()# 查詢
error_indication, error_status, error_index, var_binds = next(getCmd(SnmpEngine(),CommunityData('public'),UdpTransportTarget(('192.168.1.1', 161)),ContextData(),ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
)

6. 高級主題

6.1 異步操作

使用 AsyncCommandGenerator 實現異步請求:

from pysnmp.hlapi.asyncio import *async def snmp_get():snmp_engine = SnmpEngine()error_indication, error_status, error_index, var_binds = await getCmd(snmp_engine,CommunityData('public'),UdpTransportTarget(('192.168.1.1', 161)),ContextData(),ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0')))# 處理結果...import asyncio
asyncio.run(snmp_get())
6.2 SNMP Agent 實現

創建簡單的 SNMP Agent:

from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdrsp, contextsnmp_engine = engine.SnmpEngine()
config.addV1System(snmp_engine, 'my-area', 'public')
config.addTransport(snmp_engine, udp.domainName, udp.UdpTransport().openServerMode(('0.0.0.0', 161)))context.SnmpContext(snmp_engine)
cmdrsp.GetCommandResponder(snmp_engine, context.SnmpContext(snmp_engine))snmp_engine.transportDispatcher.jobStarted(1)
try:snmp_engine.transportDispatcher.runDispatcher()
except KeyboardInterrupt:snmp_engine.transportDispatcher.closeDispatcher()

7. 常見問題

Q1: 超時或無響應
  • 檢查目標設備的 SNMP 服務是否啟用。
  • 檢查防火墻是否允許 UDP 161 端口通信。
Q2: OID 不存在
  • 使用 snmpwalk 或 MIB 瀏覽器確認目標設備支持的 OID。
Q3: 權限不足
  • 確保使用正確的社區名(如 private 用于寫操作)。
  • 對于 SNMPv3,檢查用戶認證和加密參數。
Q4: MIB 加載失敗
  • 確認 MIB 文件路徑正確,或手動下載 MIB 文件。

通過以上步驟,可以快速上手 pysnmp 進行基本的 SNMP 操作。更詳細的文檔請參考 pysnmp 官方文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81915.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SHELL編程簡介

1.腳本格式: 聲明位于shell腳本的行首,通常形式如下: #!/bin/sh#!/bin/bash 其中#表示注釋,!聲明所使用的shell,后面為所使用shell的絕對路徑。 2.常用函數 echo:shell輸出語句,可不接參數…

Django 中的 ORM 基礎語法

深入剖析 Django 中的 ORM 語法:從基礎到實戰進階 在 Django 開發領域,ORM(對象關系映射)是開發者高效操作數據庫的得力工具。它以簡潔直觀的 Python 代碼,替代繁瑣的 SQL 語句,極大提升了開發效率。本文將…

A10服務器使用vllm推理框架成功運行Qwen3大模型

1.下載Qwen3大模型: git clone https://www.modelscope.cn/Qwen/Qwen3-1.7B.git放在服務器的/mnt/workspace/Qwen3-1.7B目錄下。 2.創建python虛擬環境: python3 -m venv venv1 source venv1/bin/activate3.安裝vllm推理框架 pip install vllm 4.啟動…

Disruptor—1.原理和使用簡介

大綱 1.Disruptor簡介 2.Disruptor和BlockingQueue的壓測對比 3.Disruptor的編程模型 4.Disruptor的數據結構與生產消費模型 5.RingBuffer Disruptor Sequence相關類 6.Disruptor的WaitStrategy消費者等待策略 7.EventProcessor EventHandler等類 8.Disruptor的運行…

谷歌瀏覽器調試python pygui程序

谷歌瀏覽器地址:chrome://inspect/#devices 前端vue為8080, 配置如下 pychat 需要配置環境變量 PYTHONUNBUFFERED1;QTWEBENGINE_REMOTE_DEBUGGING9012

手寫Tomcat(二)—Tomcat簡化模型架構

一、 Tomcat架構 Tomcat的主要角色是 servlet容器,提供一個解釋器,能夠解析并執行JavaScript Object Notation (JON)腳本(后更改為Servlet),并將請求傳送到指定的服務器(如JavaBean)。因此&…

Android 網絡全棧攻略(五)—— 從 OkHttp 攔截器來看 HTTP 協議二

上一篇我們介紹了 OkHttp 的責任鏈以及第一個內置攔截器 —— 重試與重定向攔截器。本篇我們將剩余四個攔截器的解析做完。 1、橋接攔截器 BridgeInterceptor 作為請求準備和實際發送之間的橋梁,自動處理 HTTP 請求頭等繁瑣工作。比如設置請求內容長度&#xff0c…

JDBC-java操作數據庫

1.基本結構: package com.atguigu.servlets;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDBCemo {public static void main(String[] args) throws Exception{String url "jdbc:mysql:///mysql&qu…

七彩喜適老化改造:讓每個空間成為長者尊嚴的守護者

隨著我國老齡化進程的加速,居家養老逐漸成為老年人首選的生活方式。 為了讓老年人能夠在熟悉的環境中安享晚年,適老化改造應運而生。 七彩喜作為居家養老服務的創新者,致力于通過科學設計和人性化改造,為老年人提供安全、舒適、…

【動態規劃】5 從一次函數出發推導斜率優化dp

背景 基于例題《任務安排》逐步推導進行斜率優化。 引入 例題:P2365 任務安排 考慮動態規劃。使用 d p i , j dp_{i,j} dpi,j? 表示前 i i i 個任務分了 j j j 段的最小費用。 顯然,有 d p i , j min ? k 1 i ? 1 ( d p i , j , d p k , j…

MySQL中實現大數據量的快速插入

一、SQL語句優化? 1. ?批量插入代替單條插入? ?單條插入會頻繁觸發事務提交和日志寫入,效率極低。?批量插入通過合并多條數據為一條SQL語句,減少網絡傳輸和SQL解析開銷。 -- 低效寫法:逐條插入 INSERT INTO table (col1, col2) VALUE…

C++23中std::span和std::basic_string_view可平凡復制提案解析

文章目錄 一、引言二、相關概念解釋2.1 平凡復制(Trivially Copyable)2.2 std::span2.3 std::basic_string_view 三、std::span和std::basic_string_view的應用場景3.1 std::span的應用場景3.2 std::basic_string_view的應用場景 四、P2251R1提案對std::…

廣東省省考備考(第十八天5.23)—言語:語句填空題(聽課后強化訓練)

錯題 解析 橫線出現在文段中間,需結合上下文內容進行分析。文段開篇指出逃離北上廣深的話題時而出現,一些人離開大城市回到小城市。隨后通過轉折詞“但”引出橫線內容,且結合橫線后人才傾向于向更發達的地方流動的內容,橫線處應體…

持續更新 ,GPT-4o 風格提示詞案例大全!附使用方式

本文匯集了各類4o風格提示詞的精選案例,從基礎指令到復雜任務,從創意寫作到專業領域,為您提供全方位的參考和靈感。我們將持續更新這份案例集,確保您始終能夠獲取最新、最有效的提示詞技巧。 讓我們一起探索如何通過精心設計的提…

創建型:建造者模式

目錄 1、核心思想 2、實現方式 2.1 模式結構 2.2 工作流程 2.3 實現案例 2.4 變體:鏈式建造者(常見于多參數對象,無需指揮者) 3、優缺點分析 4、適用場景 1、核心思想 目的:將復雜對象的構建過程與其表示分離…

力扣-長度最小的子數組

1.題目描述 2.題目鏈接 LCR 008. 長度最小的子數組 - 力扣(LeetCode) 3.題目分析 這道題目我們使用的也是雙指針。我們可以定義兩個指針都指向數組第一個元素,然后使用right指針遍歷原數組,計算left指針到right指針之間的所有元…

JAVA開發工具延長方案

親測穩定的延長方案與避坑指南 真的搞不懂了,說點專業的術語竟然成了 QINQUAN。那就直接點,把這個方案帶給需要的開發者。 延長工具直通車 保姆級教程 延長方案https://mp.weixin.qq.com/s/uajM2Y9Vz6TnolzcLur_bw還是讓大家看看,發什么會被…

SpringAI開發SSE傳輸協議的MCP Server

SpringAI 訪問地址:Spring AI ? Spring AI?是一個面向人工智能工程的應用框架,由Spring團隊推出,旨在將AI能力集成到Java應用中。Spring AI的核心是解決AI集成的根本挑戰,即將企業數據和API與AI模型連接起來?。 MCP…

JAVA動態生成類

在java的加載過程一般都是要預先定義java類,然后通過經過加載->連接->初始化三步。連接過程又可分為三步:驗證->準備->解析。初始化的類是不允許修改。但是在日常的工作中有時候需要動態生成類,那第這種情況怎么辦呢? 可以這么處理: 1、先定義一個空的類,僅…

深入解析Java微服務架構:Spring Boot與Spring Cloud的整合實踐

深入解析Java微服務架構:Spring Boot與Spring Cloud的整合實踐 引言 隨著云計算和分布式系統的快速發展,微服務架構已成為現代軟件開發的主流模式。Java作為企業級應用開發的核心語言,結合Spring Boot和Spring Cloud,為開發者提…