在网络中根据节点的MAC地址Ping节点

本文关键字:节点 MAC 地址 Ping 网络 | 更新日期: 2023-09-27 18:06:59

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

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

现在,也就是说,我唯一遇到麻烦的部分是我ping一些东西的实际部分。我知道,当涉及到MAC地址时,实际的"ping"是不可能的,那么我如何检查类似的事情呢?或者,如果更容易的话,我也可以接受基于计算机名称的ping。

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

在网络中根据节点的MAC地址Ping节点

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

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

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

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;

您需要使用RARP http://en.wikipedia.org/wiki/Reverse_Address_Resolution_Protocol

c#中MAC地址到IP地址的转换

根据网络的不同,您可以使用arp缓存来查找给定MAC地址的IP(即使您的网络设置允许您这样做,但只有在请求时另一台机器的MAC地址在缓存中时才会起作用)。你可以在维基百科上阅读arp

如果您有MAC地址,您可以使用MAC地址获得IP地址和机器名称。一旦你有了IP,你可以简单地ping机器。

关于如何从MAC地址
获取IP地址的示例,请参阅此代码。