如何在c#中获取Lan连接机器的所有IP地址

时间:2012-12-10 08:01:04

标签: c#

如何找到使用LAN网络连接的机器的所有IP地址。

foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
        {
            IPInterfaceProperties ipProps = netInterface.GetIPProperties();
            foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
            {
                listBox1.Items.Add(addr.Address.ToString());
            }
        }

这里是我正在使用的代码..但是这段代码只返回我的本地ip和127.0.0.1。找不到其他IP地址。

2 个答案:

答案 0 :(得分:2)

一般情况下,你不能。您可以尝试ping IP地址范围内的所有计算机(例如,本地子网),但某些活动计算机可能无法响应ping。您可以尝试连接到打开端口(Web服务器端口,Windows文件共享端口等),您可能会找到一些计算机,但不希望找到所有计算机。如果网络受到监控,您可能看起来像黑客。

根据您的网络,您可以尝试针对IP地址范围进行反向DNS查找。这适用于使用DHCP并绑定到本地DNS服务器的情况,因为它是通过名称访问主机的一种方法,即使动态IP地址发生更改也是如此。当它工作时,这种方法将返回带有主机名的活动租约(因此某些机器可能当前不活动)。

答案 1 :(得分:0)

Ping命名空间中有System.Net个类。但只有目标计算机没有运行防火墙时才能使用它。

using System.Net

NetworkInformation.Ping newping = new NetworkInformation.Ping();
NetworkInformation.PingReply reply = newping.Send("192.168.1.1");
if (reply.Status == NetworkInformation.IPStatus.Success)
{
    // Target computer is an active host
}

如果计算机有防火墙,则无法在交换机上使用简单的网络管理协议。