3个版本
0.1.2 | 2021年5月24日 |
---|---|
0.1.1 | 2021年5月21日 |
0.1.0 | 2021年5月21日 |
#8 in #encapsulation
52KB
782 行
hep
使用HEP网络协议规范
HEP v3 (Homer封装协议版本3) 通过UDP/TCP/SCTP连接传输数据包。
支持HEP v1、HEP v2、HEP v3。
HEP v2仅支持ipv4。
hep v1格式
索引 | 备注 |
---|---|
0 | hep版本 |
1.. | 数据包有效载荷 |
hep v2格式
索引 | 备注 |
---|---|
0 | hep版本,静态值:2 |
1 | hep头部长度 |
2 | IP协议族 |
3 | 转换类型 |
4-5 | 源端口 |
6-7 | 目的端口 |
8-11 | 源IP |
12-15 | 目的IP |
16-19 | 时间戳秒 |
20-23 | 时间戳微秒偏移 |
24-27 | 捕获ID |
28.. | 数据包有效载荷 |
hep v3格式
请参阅 https://github.com/sipcapture/HEP
示例
use hep::parse_packet;
use std::net::UdpSocket;
fn main() -> std::io::Result<()> {
let socket = UdpSocket::bind("169.254.165.11:9060").expect("couldn't bind to address");
loop {
let mut buffer = [0x0; 0xdbba0];
let (number_of_bytes, src_addr) =
socket.recv_from(&mut buffer).expect("Didn't receive data");
let filled_buf = &mut buffer[..number_of_bytes];
/// data allways return Hep v3 format.
/// :if hep v1 or v2, futrue is default value.
/// :Hep v3 format,see sturct Chunk
let data = parse_packet(&filled_buf);
match data {
Ok(chunk) => {
println!("Message length:{}", &chunk.packet_payload.len());
if chunk.packet_payload.len() > 6 {
println!(
"Received Hep(sip) Message from IP:{}, CaptureId:{}\n{}",
src_addr,
chunk.capture_agent_id,
chunk.packet_payload
);
} else {
println!(
"Received Hep(Keepalive) Message from IP:{}, CaptureId:{}.\n",
src_addr,
chunk.capture_agent_id
);
}
}
Err(_) => {
println!(
"Received Hep Message from IP:{}\n ignore data.\r\n\r\n",
src_addr
);
}
}
}
}
升级版本
0.1.0:
创建版本。
0.1.1:
发布版本,添加readme.md。
0.1.2:
修复readme.md。
依赖项
~205KB