using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp1 { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { TestAsync(); } private async void TestAsync() { var label0 = (Label)FindName("Label0"); var label1 = (Label)FindName("Label1"); // 获取本机第一个 IPv4 地址 var firstIPv4Address = NetworkInterface .GetAllNetworkInterfaces() .SelectMany(n => n.GetIPProperties().UnicastAddresses) .Where(a => a.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) .Select(a => a.Address) .FirstOrDefault(); label0.Content = "本机IP:"+ firstIPv4Address.ToString(); var ips = GetIPv4AddressesInSameSubnet(); var label2 = (Label)FindName("Label2"); var httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromSeconds(3); foreach (var ip in ips) { try { var address = ip.ToString(); label1.Content = "检测:" + address + " 中"; var result = await httpClient.GetAsync($"http://{address}:8080/api/RtmpControl/StopRtmpPush"); if (result != null && result.StatusCode == HttpStatusCode.OK) { label2.Content += " 、" + address; } } catch (Exception e) { continue; } } } // 获取同一网段的所有 IPv4 地址 IPAddress[] GetIPv4AddressesInSameSubnet() { var addresses = new List(); // 获取本机第一个 IPv4 地址和子网掩码 var networkInterface = NetworkInterface.GetAllNetworkInterfaces() .FirstOrDefault(n => n.OperationalStatus == OperationalStatus.Up && n.NetworkInterfaceType != NetworkInterfaceType.Loopback); if (networkInterface == null) { throw new Exception("未找到可用的网络接口。"); } var ipProperties = networkInterface.GetIPProperties(); var ipv4Address = ipProperties.UnicastAddresses.FirstOrDefault(a => a.Address.AddressFamily == AddressFamily.InterNetwork)?.Address; var subnetMask = ipProperties.UnicastAddresses.FirstOrDefault(a => a.Address.AddressFamily == AddressFamily.InterNetwork)?.IPv4Mask; if (ipv4Address == null || subnetMask == null) { throw new Exception("未找到可用的 IPv4 地址或子网掩码。"); } // 将 IPv4 地址和子网掩码转换为整数形式 var ipv4AddressBytes = ipv4Address.GetAddressBytes(); var subnetMaskBytes = subnetMask.GetAddressBytes(); var networkAddressBytes = new byte[4]; var broadcastAddressBytes = new byte[4]; for (int i = 0; i < 4; i++) { networkAddressBytes[i] = (byte)(ipv4AddressBytes[i] & subnetMaskBytes[i]); broadcastAddressBytes[i] = (byte)(ipv4AddressBytes[i] | (subnetMaskBytes[i] ^ 255)); } var networkAddress = new IPAddress(networkAddressBytes); var broadcastAddress = new IPAddress(broadcastAddressBytes); // 枚举同一网段的所有 IPv4 地址 var currentAddress = networkAddress; while (!currentAddress.Equals(broadcastAddress)) { addresses.Add(currentAddress); var nextAddressBytes = currentAddress.GetAddressBytes(); for (int i = 3; i >= 0; i--) { if (nextAddressBytes[i] == 255) { nextAddressBytes[i] = 0; } else { nextAddressBytes[i]++; break; } } currentAddress = new IPAddress(nextAddressBytes); } return addresses.ToArray(); } } }