c# 搜索同网段ip

        /// <summary>
        /// 搜索同网段ip
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="yanma"></param>
        private void sousuoip(string ip,string yanma)
        {
            //分割字符串
            string[] ip_4 = ip.Split('.');
            string[] yanma_4 = yanma.Split('.');
            int[] ip_start = new int[4];
            int[] ip_end = new int[4];
            for (int i = 0;i < 4;i ++ )
            {
                //转数字
                ip_start[i] = int.Parse(ip_4[i]);
                ip_end[i] = int.Parse(yanma_4[i]);
                //与掩码与 获得网段 起始地址
                ip_start[i] = ip_start[i] & ip_end[i];
                //获得终止地址
                ip_end[i] = 255 - ip_end[i] + ip_start[i];
            }
            //MessageBox.Show(ip_start[0] + "." + ip_start[1] + "." + ip_start[2] + "." + ip_start[3] + "\r\n" +
            //                ip_end[0] + "." + ip_end[1] + "." + ip_end[2] + "." + ip_end[3] + "\r\n");
            //遍历 ping   只是后16位
            for (int i = ip_start[2]; i <= 255; i++)
            {
                for (int j = ip_start[3]; j <= 255; j++)
                {
                    if (i == ip_end[2] && j == ip_end[3])
                        return;
                    try
                    {
                        myPing = new Ping();
                        myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);

                        string pingIP = ip_start[0].ToString() + "." + ip_start[1].ToString() + "."
                                      + i.ToString() + "." + j.ToString();
                        myPing.SendAsync(pingIP, timeout, null); //const int timeout = 1000; //ping延时
                    }
                    catch { };
                }
            }
        }
        private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (e.Reply.Status == IPStatus.Success)
            {
                this.showip.Text += (e.Reply.Address.ToString()+"\r\n");
            }
        }
 

 

要在不同的网段ping设备,您需要知道目标设备的IP地址和子网掩码。然后,您可以使用C#中的Ping类来执行ping操作。以下是一个示例代码,可以ping不同网段IP设备: ```csharp using System.Net.NetworkInformation; class Program { static void Main(string[] args) { Ping ping = new Ping(); PingOptions options = new PingOptions(); options.DontFragment = true; // 目标IP地址 string ipAddress = "192.168.1.1"; // 目标子网掩码 string subnetMask = "255.255.255.0"; // 将目标IP地址和子网掩码转换为IPAddress对象 IPAddress ip = IPAddress.Parse(ipAddress); IPAddress mask = IPAddress.Parse(subnetMask); // 使用GetNetworkAddress方法获取网络地址 IPAddress networkAddress = GetNetworkAddress(ip, mask); // 执行ping操作,遍历目标网段所有IP地址 for (int i = 1; i < 255; i++) { // 构造要pingIP地址 string pingIP = networkAddress.ToString() + "." + i.ToString(); // 调用Ping.Send方法执行ping操作 PingReply reply = ping.Send(pingIP, 1000, new byte[32], options); if (reply.Status == IPStatus.Success) { Console.WriteLine("Ping {0} 成功,时间={1}ms", pingIP, reply.RoundtripTime); } else { Console.WriteLine("Ping {0} 失败,错误={1}", pingIP, reply.Status); } } Console.ReadKey(); } // 获取网络地址 static IPAddress GetNetworkAddress(IPAddress address, IPAddress mask) { byte[] ipBytes = address.GetAddressBytes(); byte[] maskBytes = mask.GetAddressBytes(); if (ipBytes.Length != maskBytes.Length) throw new ArgumentException("Lengths of IP address and subnet mask do not match."); byte[] networkBytes = new byte[ipBytes.Length]; for (int i = 0; i < networkBytes.Length; i++) { networkBytes[i] = (byte)(ipBytes[i] & maskBytes[i]); } return new IPAddress(networkBytes); } } ``` 在上面的代码中,我们使用`GetNetworkAddress`方法来计算目标IP地址的网络地址。然后,我们使用循环遍历目标网段中的所有IP地址,并使用`Ping.Send`方法执行ping操作。如果ping操作成功,我们将打印成功的消息,否则将打印失败的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米粥哥哥

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值