根据MAC地址ping网络中的节点

时间:2011-08-30 19:53:17

标签: c# ping

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

通常我只是使用IP地址,但它们不是静态的,网络上有一些设备,我不关心这个程序的连接性。如果他们没有回复,我希望它弹出一个消息框。

现在,正如所说的那样,我遇到麻烦的唯一部分就是实际的部分。我知道当涉及到MAC地址时,实际的“ping”是不可能的,那么我怎么能检查这样的东西呢?或者,如果它更容易,我也可以接受基于计算机名称的ping事件。

编辑:我不想使用像arp这样的东西来查找我想要的设备的IP地址。就像我说的那样,我也对是否有可能按名称搜索设备感兴趣。那会有用吗?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

如果您拥有正确管理的环境,则应使用名称。通过适当管理的环境,我主要意味着在本地网络上拥有DNS服务器。

我有类似的操作,ping工业以太网设备。这些是静态分配的地址,因此它们不会像DHCP客户端那样在DNS中注册自己。我有我们的DNS管理员为他们创建记录,所以我可以使用他们的名字。从长远来看,你将会更好,因为从现在开始你将不知道列表中的mac地址是指什么。创建名称时,您可以根据需要将其设置为描述性。

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

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;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您有MAC地址,则可以使用MAC地址获取IP地址和计算机名称。获得IP后,您只需ping机器即可。

有关如何从MAC地址获取IP地址的示例,请参阅this代码