diff --git a/examples/arp_packet.rs b/examples/arp_packet.rs index 69c86619..881082ac 100644 --- a/examples/arp_packet.rs +++ b/examples/arp_packet.rs @@ -58,13 +58,16 @@ fn get_mac_through_arp(interface: NetworkInterface, target_ip: Ipv4Addr) -> MacA println!("Sent ARP request"); - let buf = receiver.next().unwrap(); - - let arp = ArpPacket::new(&buf[MutableEthernetPacket::minimum_packet_size()..]).unwrap(); - - println!("Received reply"); - - arp.get_sender_hw_addr() + while let buf = receiver.next().unwrap() { + let arp = ArpPacket::new(&buf[MutableEthernetPacket::minimum_packet_size()..]).unwrap(); + if arp.get_sender_proto_addr() == target_ip + && arp.get_target_hw_addr() == interface.mac.unwrap() + { + println!("Received reply"); + return arp.get_sender_hw_addr(); + } + } + panic!("Never reach here") } fn main() { @@ -103,4 +106,4 @@ fn main() { let target_mac = get_mac_through_arp(interface, target_ip.unwrap()); println!("Target MAC address: {}", target_mac); -} \ No newline at end of file +}