summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs2
-rw-r--r--src/sniffing/headers.rs29
-rw-r--r--src/startup.rs9
3 files changed, 22 insertions, 18 deletions
diff --git a/src/main.rs b/src/main.rs
index 958e39d..c2da16c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,6 @@
mod config;
mod geoparsers;
-mod sniffing;
+pub mod sniffing;
mod startup;
use startup::init;
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())
}
}
}
diff --git a/src/startup.rs b/src/startup.rs
index b9e0191..5caaa86 100644
--- a/src/startup.rs
+++ b/src/startup.rs
@@ -1,6 +1,6 @@
// Here we iniitialize systems crucial for nsc
use std::io::Read;
-use sniffing::headers::sniff_raw_packets;
+use crate::sniffing::headers::sniff_raw_packets;
pub fn init() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
let mut config = tun::Configuration::default();
@@ -21,8 +21,9 @@ pub fn init() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>>
loop {
let amount = dev.read(&mut buf)?;
- sniff_raw_packets(&buf[0..amount]);
- dbg!("{:?}", &buf[0..amount]);
-
+ // dbg!(sniff_raw_packets(&buf[0..amount])?);
+ let govno = sniff_raw_packets(&buf[0..amount])?;
+ println!("{govno:?}")
+ // dbg!("{:?}", &buf[0..amount]);
}
}