一个 Swift 包,用于向网络设备发出 SNMP(简单网络管理协议)请求。
SwiftSnmpKit 支持以下 SNMP 版本
仅支持通过 UDP 端口 161 发送 SNMP 查询。不支持通过 UDP 端口 162 发送 SNMP traps 或 informs。不支持 TCP 传输。
支持以下 SNMP 查询类型
支持以下 SNMP 回复类型
SnmpSender 单例将报告 SNMP EngineIDs、Engine Boots 和 Engine Times,并用于未来的查询。
import SwiftSnmpKit
guard let snmpSender = SnmpSender.shared else...
初始化 SnmpSender 单例await snmpSender.send()
发送并等待 SNMP 请求你可以使用 Swift Package Manager 并在 Package.swift
中指定依赖项,通过添加以下内容
.package(url: "https://github.com/darrellroot/SwiftSnmpKit.git", .upToNextMajor(from: "0.1.6"))
guard let snmpSender = SnmpSender.shared else {
fatalError("Snmp Sender not inialized")
}
let result = await snmpSender.send(host: agent,
command: .getRequest, community: community,
oid: "1.3.6.1.2.1.1.1.0")
let getNextResult = await snmpSender.send(host: agent,
userName: "ciscoprivuser", pduType: .getNextRequest,
oid: "1.3.6.1.2", authenticationType: .sha1,
authPassword: "authpassword",
privPassword: "privpassword")
authPassword 和 privPassword 参数是可选的。
SNMPv2c 请求只会尝试一次。如果发生数据包丢失,你的代码需要重新传输。
SNMPv3 请求最多会尝试三次。 这允许 SNMP 报告填充 EngineID、EngineBoots 和 EngineTime 字段。
switch getNextResult {
case .failure(let error):
consecutiveNextFailures += 1
print("SNMP Error: \(error.localizedDescription)")
case .success(let variableBinding):
print(variableBinding)
if variableBinding.value == AsnValue.endOfMibView {
done = true
}
if variableBinding.value == AsnValue.noSuchObject {
consecutiveNextFailures += 1
} else {
consecutiveNextFailures = 0
}
nextOid = variableBinding.oid
}
包含命令行 SNMP 工具的示例项目位于 https://github.com/darrellroot/SwiftSnmpTools