5个版本 (3个重大变更)
新功能 0.4.1 | 2024年8月8日 |
---|---|
0.4.0 | 2024年8月7日 |
0.3.0 | 2024年1月31日 |
0.2.0 | 2023年10月9日 |
0.1.0 | 2023年3月5日 |
#405 in 解析器实现
每月240次下载
在netgauze-bmp-service中使用
1.5MB
28K SLoC
BMP监控协议
BMP-4协议表示和序列化/反序列化(serde)
示例
运行示例: cargo run --example bmp
use chrono::{DateTime, Utc};
use netgauze_bgp_pkt::BgpMessage;
use netgauze_bmp_pkt::{
iana::RouteMirroringInformation, BmpMessage, BmpMessageValue, BmpPeerType, PeerHeader,
RouteMirroringMessage, RouteMirroringValue,
};
use netgauze_parse_utils::{ReadablePDU, Span, WritablePDU};
use std::{
io::Cursor,
net::{IpAddr, Ipv4Addr, Ipv6Addr},
str::FromStr,
};
fn main() {
let bmp_msg = BgpMessage::V3(BmpMessageValue::RouteMirroring(RouteMirroringMessage::new(
PeerHeader::new(
BmpPeerType::LocRibInstancePeer { filtered: false },
None,
Some(IpAddr::V6(Ipv6Addr::from_str("2001::1").unwrap())),
65000,
Ipv4Addr::new(172, 10, 0, 1),
Some(Utc::now()),
),
vec![
RouteMirroringValue::Information(RouteMirroringInformation::Experimental65531),
RouteMirroringValue::BgpMessage(BgpMessage::KeepAlive),
],
)));
println!(
"JSON representation of BMP packet: {}",
serde_json::to_string(&bmp_msg).unwrap()
);
// Serialize the message into it's BGP binary format
let mut buf: Vec<u8> = vec![];
let mut cursor = Cursor::new(&mut buf);
bmp_msg.write(&mut cursor).unwrap();
assert_eq!(
buf,
vec![
3, 0, 0, 0, 77, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 253, 232, 172, 10, 0, 1, 99, 67, 29, 215, 0, 10, 102, 27, 0, 1, 0, 2,
255, 251, 0, 0, 0, 19, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 0, 19, 4
]
);
// Deserialize the message from binary format
let (_, bmp_msg_back) = BmpMessage::from_wire(Span::new(&buf)).unwrap();
assert_eq!(bmp_msg, bmp_msg_back);
}
支持的BMP协议RFC
开发文档
- 使用此库对接受
BmpMessage
的其他代码进行模糊测试
#![no_main]
use libfuzzer_sys::fuzz_target;
use netgauze_bmp_pkt::BmpMessage;
fuzz_target!(|data: BmpMessage| {
// Some fuzzing target that accepts BmpMessage as input and need to be fuzzed
});
依赖项
~2–13MB
~157K SLoC