【问题标题】:Ping a node on the network based on its MAC address根据 MA​​C 地址 Ping 网络上的节点
【发布时间】:2011-09-01 19:58:35
【问题描述】:

我希望用户能够输入网络上计算机的 MAC。一旦他们这样做了,它就会将其添加到列表中。然后,程序将在每次调用类时 ping 列表中的所有这些 MAC(我知道这不一定是可能的,但请继续阅读)。

通常我会简单地使用 IP 地址,但它们不是静态的,并且网络上有很多我不关心该程序的连接性的设备。如果他们没有回应,我希望它弹出一个消息框。

现在,话虽如此,我唯一遇到问题的部分是我 ping 某些东西的实际部分。我知道当涉及到 MAC 地址时,实际的“ping”是不可能的,那么我该如何检查类似的东西呢?或者,如果更简单,我也可以接受基于计算机名称的 ping 操作。

编辑:我宁愿不必使用诸如 arp 之类的东西来查找我想要的设备的 IP 地址。就像我说的那样,我也对是否可以按名称搜索设备感兴趣。这行得通吗?

【问题讨论】:

    标签: c# ping


    【解决方案1】:

    如果您有一个适当管理的环境,您应该使用名称。通过适当管理的环境,我主要是指在您的本地网络上拥有 DNS 服务器。

    我正在运行类似的东西,可以 ping 工业以太网设备。这些是静态分配的地址,因此它们不会像 DHCP 客户端那样向 DNS 注册自己。我让我们的 DNS 管理员为他们创建记录,这样我就可以使用他们的名字。从长远来看,您会过得更好,因为从现在起两年后您将不知道列表中的 MAC 地址指的是什么。创建名称时,您可以根据需要使它们具有描述性。

    编辑:这是一个函数,它将名称作为字符串,从 DNS 中查找关联的 IP,然后 ping。如果 DNS 解析失败或 ping 未报告成功,则该函数返回 false。否则返回真。顺便说一句,您还应该记录异常以便稍后进行故障排除。

    public bool Check(string Name)
    {
        //try dns resolution, if fails, quit reporting error
        IPAddress[] addresses = null;
        try
        {
            addresses = Dns.GetHostAddresses(Name);
        }
        catch (SocketException)
        {
            return false;
        }
    
        //ping remote address
        PingReply reply = ping.Send(addresses[0]);
        switch (reply.Status)
        {
            case IPStatus.Success:
                return true;
                break;
            default:
                return false;
                break;
        }
    }
    

    编辑 2:这是我在这个项目中使用的命名空间。不确定具体在哪里,但是添加这三个将使一切顺利。

    using System.Net.NetworkInformation;
    using System.Net;
    using System.Net.Sockets;
    

    【讨论】:

    • 嗯,我要 ping 的服务器确实有静态名称。您如何根据已保存的姓名列表 ping?
    • 我添加了一个函数,它将 ping 从 DNS 解析返回的第一个可用地址。 HTH!
    • 哇,太棒了!但是,出于好奇,您使用哪些库来使其正常工作? VS 无法识别 IPAddress、DNS.GetHostAddress(Name) 或 (SocketException)。
    • 添加了我引用的命名空间列表。
    • 没问题。奇怪的是你有时会问一个特定的问题(反向 arp 解析)并最终得到一个与你计划不同的解决方案! :) 感谢你的接纳。你能给我投票吗? (将使我超过 2600 代表)
    【解决方案2】:
    【解决方案3】:

    根据网络,您可以使用 arp 缓存来查找给定 MAC 地址的 IP(即使您的网络设置为您可以执行此操作,它也只有在 MAC 地址请求时另一台机器的缓存在缓存中)。你可以read about arp on Wikipedia

    【讨论】:

    • 我希望避免使用 MAC 地址来查找 IP 地址。这似乎是不必要的开销。这真的是唯一的解决方案吗?
    【解决方案4】:

    如果您有 MAC 地址,则可以使用 MAC 地址获取 IP 地址和机器名称。获得 IP 后,您可以简单地 ping 机器。

    查看this 代码,了解如何从 MAC 地址获取 IP 地址的示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2020-06-22
      • 2013-06-28
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多