added register packet handle
This commit is contained in:
parent
60ae19cfcf
commit
7e80578038
@ -63,6 +63,12 @@ sdlan协议的总体格式如下:
|
|||||||
"v4": [1,2,3,4],
|
"v4": [1,2,3,4],
|
||||||
// 如果family为10,则v6有用,一个16字节的数组,表示ipv6地址
|
// 如果family为10,则v6有用,一个16字节的数组,表示ipv6地址
|
||||||
"v6": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
|
"v6": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
|
||||||
}
|
},
|
||||||
|
// data为二进制的字节数组,为aes加密之后的tun流量。
|
||||||
|
"data": []
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
其中,`src_ip`为tun的ip数据包的来源ip,`dst_ip`为tun的ip数据包的目的ip。均为大端序的32位无符号整数。`sock`为转发时由sn填充的发送客户端的信息,发送短不需要处理。`data`为tun的数据流量,使用`network_pass`进行加密后的二进制数据。
|
||||||
|
|
||||||
|
在发送packet数据包之前,消息体部分的数据,为json化之后的packet使用`header_pass`进行aes加密后的二进制数据。
|
||||||
@ -81,6 +81,8 @@ pub enum PacketType {
|
|||||||
PKTRegisterSuper,
|
PKTRegisterSuper,
|
||||||
// 数据转发
|
// 数据转发
|
||||||
PKTPacket,
|
PKTPacket,
|
||||||
|
// 打洞消息
|
||||||
|
PKTRegister,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::convert::From<u8> for PacketType {
|
impl std::convert::From<u8> for PacketType {
|
||||||
@ -89,6 +91,7 @@ impl std::convert::From<u8> for PacketType {
|
|||||||
// 0 => Self::PacketInvalid,
|
// 0 => Self::PacketInvalid,
|
||||||
1 => Self::PKTRegisterSuper,
|
1 => Self::PKTRegisterSuper,
|
||||||
2 => Self::PKTPacket,
|
2 => Self::PKTPacket,
|
||||||
|
3 => Self::PKTRegister,
|
||||||
_ => Self::PKTInvalid,
|
_ => Self::PKTInvalid,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,6 +103,7 @@ impl PacketType {
|
|||||||
Self::PKTInvalid => 0,
|
Self::PKTInvalid => 0,
|
||||||
Self::PKTRegisterSuper => 1,
|
Self::PKTRegisterSuper => 1,
|
||||||
Self::PKTPacket => 2,
|
Self::PKTPacket => 2,
|
||||||
|
Self::PKTRegister => 3,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,3 +6,6 @@ pub use register_super::*;
|
|||||||
|
|
||||||
mod packet;
|
mod packet;
|
||||||
pub use packet::*;
|
pub use packet::*;
|
||||||
|
|
||||||
|
mod register;
|
||||||
|
pub use register::*;
|
||||||
|
|||||||
15
src/packet/register.rs
Normal file
15
src/packet/register.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::peer::{IpSubnet, SdlanSock};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct Register {
|
||||||
|
// 源ip
|
||||||
|
pub src_ip: u32,
|
||||||
|
// 目的ip
|
||||||
|
pub dst_ip: u32,
|
||||||
|
// supernode转发时开到的发送者的外网ip信息
|
||||||
|
pub sock: SdlanSock,
|
||||||
|
// 发送者的tun的ip信息
|
||||||
|
pub dev_addr: IpSubnet,
|
||||||
|
}
|
||||||
@ -101,6 +101,14 @@ pub fn is_multicast(ip: u32) -> bool {
|
|||||||
first >= 224 && first <= 239
|
first >= 224 && first <= 239
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_multi_broadcast(ip: u32) -> bool {
|
||||||
|
if ip == 0xffffffff {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
let first = ((ip >> 24) & 0xff) as u8;
|
||||||
|
first >= 224 && first <= 239
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ip_to_string(ip: u32) -> String {
|
pub fn ip_to_string(ip: u32) -> String {
|
||||||
format!(
|
format!(
|
||||||
"{}.{}.{}.{}",
|
"{}.{}.{}.{}",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user