5 个版本
使用旧 Rust 2015
0.2.2 | 2017年4月5日 |
---|---|
0.2.1 | 2017年1月22日 |
0.2.0 | 2017年1月22日 |
0.1.1 | 2016年10月5日 |
0.1.0 | 2016年10月4日 |
#50 in #synchronous
217 每月下载量
用于 roboplc
49KB
1K SLoC
RUST-SNMP
纯 Rust 的 SNMPv2 客户端库,无需依赖。
lib.rs
:
RUST-SNMP
纯 Rust 的 SNMPv2 客户端库,无需依赖。
支持
- GET
- GETNEXT
- GETBULK
- SET
- 基本的 SNMPv2 类型
- 同步请求
- UDP 传输
目前不支持
- SNMPv1
- SNMPv3
- MIBs
- 异步请求
- 除 UDP 以外的传输
待办事项
- 异步请求
- 遍历功能
- 额外的
ObjectIdentifier
工具方法 - 解耦 PDU 构建/解析与套接字处理
- SNMPv3(需要外部依赖)
示例
GET NEXT
use std::time::Duration;
use snmp::{SyncSession, Value};
let sys_descr_oid = &[1,3,6,1,2,1,1,1,];
let agent_addr = "198.51.100.123:161";
let community = b"f00b4r";
let timeout = Duration::from_secs(2);
let mut sess = SyncSession::new(agent_addr, community, Some(timeout), 0).unwrap();
let mut response = sess.getnext(sys_descr_oid).unwrap();
if let Some((_oid, Value::OctetString(sys_descr))) = response.varbinds.next() {
println!("myrouter sysDescr: {}", String::from_utf8_lossy(sys_descr));
}
GET BULK
use std::time::Duration;
use snmp::SyncSession;
let system_oid = &[1,3,6,1,2,1,1,];
let agent_addr = "[2001:db8:f00:b413::abc]:161";
let community = b"f00b4r";
let timeout = Duration::from_secs(2);
let non_repeaters = 0;
let max_repetitions = 7; // number of items in "system" OID
let mut sess = SyncSession::new(agent_addr, community, Some(timeout), 0).unwrap();
let response = sess.getbulk(&[system_oid], non_repeaters, max_repetitions).unwrap();
for (name, val) in response.varbinds {
println!("{} => {:?}", name, val);
}
SET
use std::time::Duration;
use snmp::{SyncSession, Value};
let syscontact_oid = &[1,3,6,1,2,1,1,4,0];
let contact = Value::OctetString(b"Thomas A. Anderson");
let agent_addr = "[2001:db8:f00:b413::abc]:161";
let community = b"f00b4r";
let timeout = Duration::from_secs(2);
let mut sess = SyncSession::new(agent_addr, community, Some(timeout), 0).unwrap();
let response = sess.set(&[(syscontact_oid, contact)]).unwrap();
assert_eq!(response.error_status, snmp::snmp::ERRSTATUS_NOERROR);
for (name, val) in response.varbinds {
println!("{} => {:?}", name, val);
}