diff options
| author | zedddie <rust@zedddie.rs> | 2026-03-16 23:50:51 +0100 |
|---|---|---|
| committer | tuturuu <zedddiezxc@gmail.com> | 2026-03-16 23:50:51 +0100 |
| commit | 81e1ed42a0d0ef0ee2cd6092b23a0238c46e0daa (patch) | |
| tree | af8121241af1d55c1b536c50423d3e6eb583e5d9 /src/sniffing/headers.rs | |
| parent | e8c1fbd7d4c77215bb76e4fcd04a2434615e433c (diff) | |
add dns field and check
Diffstat (limited to 'src/sniffing/headers.rs')
| -rw-r--r-- | src/sniffing/headers.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/sniffing/headers.rs b/src/sniffing/headers.rs index 644a6b2..050f2d3 100644 --- a/src/sniffing/headers.rs +++ b/src/sniffing/headers.rs @@ -20,7 +20,8 @@ pub enum PacketInfo { src_port: Port, dst_ip: Ipv4, dst_port: Port, - protocol: Protocol + protocol: Protocol, + dns: bool }, // <https://www.geeksforgeeks.org/computer-networks/internet-protocol-version-6-ipv6-header/> V6 { @@ -28,7 +29,8 @@ pub enum PacketInfo { src_port: Port, dst_ip: Ipv6, dst_port: Port, - protocol: Protocol + protocol: Protocol, + dns: bool } } @@ -49,17 +51,21 @@ pub fn sniff_raw_packets(packet: &[u8]) -> SniffedPacket { dbg!(ver); match ver { 4 => { + let dst_port = Port::from_be_bytes([packet[22], packet[23]]); + let dns; + if dst_port == 53 { dns = true; } else { dns = false; }; // FIXME: hardcoded IPv4 port offset let v4 = PacketInfo::V4{ src_ip: <Ipv4>::try_from(&packet[12..16])?, src_port: Port::from_be_bytes([packet[20], packet[21]]), dst_ip: <Ipv4>::try_from(&packet[16..20])?, - dst_port: Port::from_be_bytes([packet[22], packet[23]]), + dst_port, protocol: match packet[9] { 6 => Protocol::TCP, 17 => Protocol::UDP, p => Protocol::Unsupported(p) - } + }, + dns }; if !matches!(v4.protocol(), Protocol::Unsupported(_)) { println!("{v4:?}"); @@ -70,16 +76,20 @@ pub fn sniff_raw_packets(packet: &[u8]) -> SniffedPacket { }, 6 => { println!("im in 6!"); + let dst_port = Port::from_be_bytes([packet[22], packet[23]]); + let dns; + if dst_port == 53 { dns = true; } else { dns = false; }; let v6 = PacketInfo::V6{ src_ip: <Ipv6>::try_from(&packet[8..24])?, src_port: Port::from_be_bytes([packet[40], packet[41]]), dst_ip: <Ipv6>::try_from(&packet[24..40])?, - dst_port: Port::from_be_bytes([packet[42], packet[43]]), + dst_port, protocol: match packet[6] { 6 => Protocol::TCP, 17 => Protocol::UDP, p => Protocol::Unsupported(p) - } + }, + dns }; if !matches!(v6.protocol(), Protocol::Unsupported(_)) { println!("{v6:?}"); |
