from pysnmp.hlapi import*# 定義參數
community ='public'# SNMPv2c 社區名
target_ip ='192.168.1.1'# 目標設備 IP
oid ='1.3.6.1.2.1.1.1.0'# 要查詢的 OID# 發起 GET 請求
error_indication, error_status, error_index, var_binds =next(getCmd(SnmpEngine(),# SNMP 引擎(管理內部狀態)CommunityData(community),# 認證參數(社區名)UdpTransportTarget(# 傳輸協議(UDP/IP)(target_ip,161), timeout=2, retries=2),ContextData(),# SNMP 上下文(通常默認)ObjectType(ObjectIdentity(oid))# 要查詢的 OID))# 處理結果if error_indication:print(f"通信錯誤: {error_indication}")elif error_status:print(f"協議錯誤: {error_status} at index {error_index}")else:for oid, value in var_binds:print(f"{oid} = {value}")
1.2 核心參數解析
參數/方法
作用
SnmpEngine()
管理 SNMP 引擎的全局狀態(如消息 ID、緩存等),每個會話通常一個實例。
CommunityData(community)
定義 SNMPv1/v2c 的社區名(類似密碼)。
UdpTransportTarget()
指定目標設備的 IP 和端口,支持超時(timeout)和重試(retries)。
ObjectIdentity(oid)
將 OID 字符串(如 1.3.6.1.2.1.1.1.0)轉換為內部對象。
getCmd()
生成 SNMP GET 請求的生成器,需用 next() 觸發執行。
1.3 流程說明
構建請求:通過 getCmd() 方法生成一個 SNMP GET 請求生成器。
發送請求:調用 next() 發送請求并等待響應。
解析響應:返回的 var_binds 是一個包含 (OID, 值) 的列表。
錯誤處理:
error_indication: 網絡或協議錯誤(如超時)。
error_status: SNMP 協議錯誤(如 noSuchName)。
2. SNMP WALK 操作詳解
2.1 核心代碼結構
from pysnmp.hlapi import*# 發起 WALK 請求(遍歷子樹)
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')),# 遍歷的起始 OIDlexicographicMode=False# 是否按字典序遍歷(默認 True)))if error_indication:print(f"錯誤: {error_indication}")else:for var_bind_row in var_bind_table:for oid, value in var_bind_row:print(f"{oid} = {value}")
2.2 核心參數解析
參數/方法
作用
nextCmd()
生成 SNMP GETNEXT 請求的生成器,用于遍歷 MIB 樹。
lexicographicMode=False
控制遍歷方式:False 表示僅在指定 OID 子樹內遍歷,避免無限循環。
2.3 流程說明
遍歷機制:nextCmd() 通過連續發送 GETNEXT 請求,逐個獲取下一個 OID 的值。
終止條件:當返回的 OID 超出起始 OID 的子樹范圍時,自動停止。
結果處理:var_bind_table 是一個二維列表,每行對應一次響應的多個變量綁定。
3. SNMP SET 操作詳解
3.1 核心代碼結構
from pysnmp.hlapi import*# 定義要設置的 OID 和值
oid ='1.3.6.1.2.1.1.5.0'# 系統名稱的 OID
new_value = OctetString('NewRouterName')# 新值類型需與 OID 定義匹配# 發起 SET 請求
error_indication, error_status, error_index, var_binds =next(setCmd(SnmpEngine(),CommunityData('private', mpModel=1),# 使用寫權限的社區名UdpTransportTarget(('192.168.1.1',161)),ContextData(),ObjectType(ObjectIdentity(oid), new_value)))if error_indication:print(f"通信錯誤: {error_indication}")elif error_status:print(f"SET 失敗: {error_status} at index {error_index}")else:print("SET 操作成功")
論文鏈接:LoRA: Low-Rank Adaptation of Large Language Models 官方實現:microsoft/LoRA 非官方實現:huggingface/peft、huggingface/diffusers 這篇文章要介紹的是一種大模型/擴散模型的微調方法,叫做低秩適應(也就是…