diff --git a/switch/src/handle/recv_handler.rs b/switch/src/handle/recv_handler.rs index 0f3961e..a9e3f80 100644 --- a/switch/src/handle/recv_handler.rs +++ b/switch/src/handle/recv_handler.rs @@ -109,7 +109,8 @@ impl RecvHandler { return Ok(()); } let destination = net_packet.destination(); - if current_device.virtual_ip() != destination && self.connect_status.load() == ConnectStatus::Connected { + if !destination.is_broadcast() && destination != current_device.broadcast_address + && current_device.virtual_ip() != destination && self.connect_status.load() == ConnectStatus::Connected { if !check_dest(source, current_device.virtual_netmask, current_device.virtual_network) { log::warn!("转发数据,源地址错误:{:?},当前网络:{:?},route_key:{:?}",source,current_device.virtual_network,route_key); return Ok(()); diff --git a/switch/src/handle/tun_handler.rs b/switch/src/handle/tun_handler.rs index da837f1..022d5ee 100644 --- a/switch/src/handle/tun_handler.rs +++ b/switch/src/handle/tun_handler.rs @@ -49,7 +49,7 @@ fn handle(sender: &Sender, data: &mut [u8], tun_writer: &TunWriter, cu // // 137端口是在局域网中提供计算机的名字或IP地址查询服务 // return Ok(()); // } - if src_ip != current_device.virtual_ip() || !check_dest(dest_ip, current_device.virtual_netmask, current_device.virtual_network) { + if src_ip != current_device.virtual_ip() || (!check_dest(dest_ip, current_device.virtual_netmask, current_device.virtual_network) && !dest_ip.is_broadcast()) { return Ok(()); } if src_ip == dest_ip { @@ -97,7 +97,7 @@ fn start_(sender: Sender, } } -#[cfg(any(target_os = "linux",target_os = "macos"))] +#[cfg(any(target_os = "linux", target_os = "macos"))] fn start_(sender: Sender, tun_reader: TunReader, tun_writer: TunWriter,