我希望用户能够在网络上输入计算机的MAC。一旦他们完成了,它就会将它添加到列表中。然后程序将在每次调用类时对列表中的所有MAC执行ping操作(我知道这不一定是可能的,但请继续阅读)。
通常我只是使用IP地址,但它们不是静态的,网络上有一些设备,我不关心这个程序的连接性。如果他们没有回复,我希望它弹出一个消息框。
现在,正如所说的那样,我遇到麻烦的唯一部分就是实际的部分。我知道当涉及到MAC地址时,实际的“ping”是不可能的,那么我怎么能检查这样的东西呢?或者,如果它更容易,我也可以接受基于计算机名称的ping事件。
编辑:我不想使用像arp这样的东西来查找我想要的设备的IP地址。就像我说的那样,我也对是否有可能按名称搜索设备感兴趣。那会有用吗?答案 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代码