From 67a82ee5d8adfb96a5a04dcb6799cdcaf3ddc356 Mon Sep 17 00:00:00 2001 From: shellrow <81893184+shellrow@users.noreply.github.com> Date: Thu, 6 May 2021 20:30:32 +0900 Subject: [PATCH] Support for Windows icmp issue (pnet v0.27) --- Cargo.toml | 3 ++- src/gateway.rs | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 455113c..3417259 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,4 +11,5 @@ categories = ["network-programming"] license = "MIT" [dependencies] -pnet = "0.27" +pnet = "0.26" +pnet_datalink = "0.27" diff --git a/src/gateway.rs b/src/gateway.rs index 149c514..0b8cdbe 100644 --- a/src/gateway.rs +++ b/src/gateway.rs @@ -67,27 +67,27 @@ fn send_udp_packet(){ fn receive_icmp_packets(icmp_type: pnet::packet::icmp::IcmpType, timeout: &Duration) -> Result{ let default_idx = interface::get_default_interface_index().unwrap(); - let interfaces = pnet::datalink::interfaces(); - let interface = interfaces.into_iter().filter(|interface: &pnet::datalink::NetworkInterface| interface.index == default_idx).next().expect("Failed to get Interface"); - let config = pnet::datalink::Config { + let interfaces = pnet_datalink::interfaces(); + let interface = interfaces.into_iter().filter(|interface: &pnet_datalink::NetworkInterface| interface.index == default_idx).next().expect("Failed to get Interface"); + let config = pnet_datalink::Config { write_buffer_size: 4096, read_buffer_size: 4096, read_timeout: None, write_timeout: None, - channel_type: pnet::datalink::ChannelType::Layer2, + channel_type: pnet_datalink::ChannelType::Layer2, bpf_fd_attempts: 1000, linux_fanout: None, promiscuous: false, }; - let (mut _tx, mut rx) = match pnet::datalink::channel(&interface, config) { - Ok(pnet::datalink::Channel::Ethernet(tx, rx)) => (tx, rx), + let (mut _tx, mut rx) = match pnet_datalink::channel(&interface, config) { + Ok(pnet_datalink::Channel::Ethernet(tx, rx)) => (tx, rx), Ok(_) => panic!("Unknown channel type"), Err(e) => panic!("Error happened {}", e), }; receive_packets(&mut rx, icmp_type, timeout) } -fn receive_packets(rx: &mut Box, icmp_type: pnet::packet::icmp::IcmpType, timeout: &Duration) -> Result{ +fn receive_packets(rx: &mut Box, icmp_type: pnet::packet::icmp::IcmpType, timeout: &Duration) -> Result{ let start_time = Instant::now(); loop { match rx.next() {