summaryrefslogtreecommitdiff
path: root/src/sniffing
diff options
context:
space:
mode:
Diffstat (limited to 'src/sniffing')
-rw-r--r--src/sniffing/headers.rs29
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())
}
}
}