diff options
Diffstat (limited to 'src/sniffing/headers.rs')
| -rw-r--r-- | src/sniffing/headers.rs | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/sniffing/headers.rs b/src/sniffing/headers.rs index d1d0a84..0a1a742 100644 --- a/src/sniffing/headers.rs +++ b/src/sniffing/headers.rs @@ -3,6 +3,7 @@ use tun::Error; // Here we will recieve bytes and try to get their destanation & apply Rules for them. use crate::config::Config; +#[derive(Debug)] enum Protocol { TCP, UDP @@ -10,7 +11,8 @@ enum Protocol { type Ipv4 = [u8; 4]; type Ipv6 = [u8; 16]; type Port = u16; -enum PacketInfo { +#[derive(Debug)] +pub enum PacketInfo { // <https://www.geeksforgeeks.org/computer-networks/what-is-ipv4/> V4 { src_ip: Ipv4, @@ -29,37 +31,38 @@ enum PacketInfo { } } pub fn sniff_raw_packets(packet: &[u8]) -> Result<PacketInfo, Box<dyn std::error::Error + Send + Sync + 'static>> { + println!("something"); let ver = packet[0] >> 4; + dbg!(ver); match ver { 4 => { - PacketInfo::V4{ - src_ip: packet[12..16], + Ok(PacketInfo::V4{ + src_ip: packet[12..16].try_into()?, src_port: u16::from_be_bytes([packet[20], packet[21]]), - dst_ip: packet[16..20], + dst_ip: packet[16..20].try_into()?, dst_port: u16::from_be_bytes([packet[22], packet[23]]), protocol: match packet[9] { 6 => Protocol::TCP, 4 => Protocol::UDP, - _ => return Err(format!("unsuppiorted protocol: {p}").into()) + p => return Err(format!("unsuppiorted protocol: {p}").into()) } - } + }) }, 6 => { - PacketInfo::V6{ - src_ip: packet[8..24], + Ok(PacketInfo::V6{ + src_ip: packet[8..24].try_into()?, src_port: u16::from_be_bytes([packet[40], packet[41]]), - dst_ip: packet[24..40], + dst_ip: packet[24..40].try_into()?, dst_port: u16::from_be_bytes([packet[42], packet[43]]), protocol: match packet[6] { 6 => Protocol::TCP, 4 => Protocol::UDP, - _ => return Err(format!("unsuppiorted protocol: {p}").into()) + p => return Err(format!("unsuppiorted protocol: {p}").into()) } - } + }) }, ver => { - panic!("unexpected packet ver: {ver}"); - Error + Err(format!("unsuppiorted ver: {ver}").into()) } } } |
