【问题标题】:How to Get all IP address of Lan connected machine in c# [closed]如何在c#中获取局域网连接机器的所有IP地址[关闭]
【发布时间】:2012-11-27 15:14:11
【问题描述】:

我怎样才能找到所有使用局域网连接的机器的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地址。

【问题讨论】:

  • 请显示一些代码...您尝试了什么?什么不工作?
  • 您正在尝试做的似乎更像是 DHCP 服务器的工作...请解释您为什么需要这样做,以便人们可以在需要时提供替代方案。
  • 你的努力程度接近0。
  • @ryadavilli:DHCP 服务器配置网络设备。在本地网络上查找 IP 地址并不是你会使用 DHCP 服务器的事情。

标签: c#


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    System.Net 命名空间中有一个 Ping 类。但是只有在目标计算机没有运行防火墙的情况下才能使用它。

    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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2015-01-31
      • 2012-07-22
      • 2013-02-01
      • 2011-12-02
      • 2021-07-08
      • 2011-05-01
      相关资源
      最近更新 更多