我正在开发一个Wake on LAN服务,该服务将从一个网站运行,并且应该与许多不同的平台进行交互 - 因此,没有仅限Windows的解决方案。当用户向网站注册他们的系统时,我需要获取用于构建"magic" packet的MAC地址。我有一个Java Applet能够为我这样做,并且知道一个可以工作的ActiveX控件,但我想知道是否有办法通过查询路由器/交换机来执行此服务器端。由于系统可能位于许多不同的物理子网中,因此使用ARP将无法工作 - 除非有办法配置路由器代表我执行ARP。
任何知道任何网络API,无论是专有的还是其他的,都可以用来查找给定IP地址的MAC地址?我认为我们正在使用思科路由器,但它是一个复杂的网络,并且可能有多个供应商涉及各个级别。在我向网络神做出牺牲之前,我想获得一些关于可能解决方案的背景信息。如果技术上不可行,那就没有意义了。 : - )
编辑:我们确实设置了网络基础设施以允许定向广播,但确定广播地址的准确性,因为网络掩码不总是/ 24是我需要解决的另一个难题。
答案 0 :(得分:4)
如果您使用的是使用DHCP的本地网络,则可以查看服务器数据库以获取具有该地址的最后一个用户的MAC。将来,您可以在网络中查看ARP请求,并将响应缓存在某种表中。您还可以使用RMON或SNMP来尝试查询交换机和路由器上的地址表。
应该注意的是,要在路由器之间使用WoL,您需要启用定向广播,或者您需要在本地网段中安装中继服务器。
我玩路由器和swtiches已经有一段时间,但这可能是使用SNMP查询内容的起点http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml
答案 1 :(得分:2)
使用以下内容:
getmac /s destIp
获取远程会话Mac地址。
答案 2 :(得分:1)
我不知道这些是否有用但请看一下:
答案 3 :(得分:1)
你说过我能想到的一切......
源MAC地址随着数据包从设备跳转而发生变化,因此除非客户端位于同一子网上,否则服务器将无法获取MAC地址。 (你会通过ARP来实现)
签名的java applet或activex控件将是最简单的解决方案。它(几乎被动地)可以获得所需的所有网络信息(IE甚至不会提示运行已签名的applet)
如果您完全了解正在使用该服务的网络,那么您可以通过SNMP或CDP查询网关的客户端列表。您可以将IP地址映射到MAC地址......但这实际上是依赖于供应商的(但很常见),并且与使用applet相比不会好得多(imo)。
答案 4 :(得分:1)
目前,该应用程序正在使用Java 6 applet,它允许我从远程系统中提取主机名和MAC地址。我不喜欢对Java 6有这种依赖,但是Snow Leopard和Windows都支持它,所以我可能会接受它。
在相关方面,我们的网络人员向我寻求帮助,将一些现有代码转换为ASP.NET。在对话过程中,我询问他们是否有实时MAC地址信息(因为他们根据可疑的网络活动 - 病毒/蠕虫进行端口关闭)。事实证明他们做到了,我们可以利用这个项目来访问网络数据库中的信息。
答案 5 :(得分:0)
我认为没有办法实现这一目标。当IP数据包通过第一个路由器时,主机的MAC信息丢失(因为您知道MAC仅用于以太网层)。如果最靠近PC的路由器能够告诉您远程MAC代码,那么它只能看到PC与“另一端”之间的下一个路由器的MAC。
答案 6 :(得分:0)
开始牺牲。
除非您没有涉及路由器,否则在网络方面没有通用的方法。如果涉及路由器,您将永远不会看到原始系统的MAC地址。
这假设始发系统只有一个网络接口,因此只有一个MAC地址。
事实上,您是否确定您的“魔法包”(无论是什么)将通过路由器到达您希望它到达的系统?这听起来像路由器或其他网络基础设施应该执行的功能。
答案 7 :(得分:0)
Mac地址仅用于网段,并且在每一跳都丢失。只保留IP以进行端到端 - 即使这样,也会在Natted时重写from ip地址。我想我的答案是,除非一切都在同一网段,否则你的路由器设置为代理arp(这不太现实),这是不可能的。
答案 8 :(得分:0)
您只能在同一网络中的计算机的ARP表中获取MAC条目。如果通过路由器连接到计算机,则只能在ARP表中看到路由器MAC地址。因此,除非它是同一网络上的主机(不涉及路由器),否则无法知道外部主机的MAC地址。
顺便说一下,已有很多similar question已经在SO上。
答案 9 :(得分:0)
如果是Windows系统,您可以使用NBTSTAT -A 这将返回netbios信息,IP就在那里
任何管理系统(如SMS或Altiris)都会有此信息
DHCP服务器是个好主意
如果它是本地的,你可以ping它,然后快速运行ARP -a 寻找IP,MAC将在那里。 您可能需要编写一个小批处理文件。
如果您可以访问PC,则可以使用WMI通过DHCP访问Nic的信息。
答案 10 :(得分:0)
如上所述,如果该主机位于同一子网中,我们可以从已知的IP地址获取mac地址。先ping那个ip;然后看看arp -a | grep并解析nix *上的字符串以获取mac地址。
我们可以从所有编程语言标准API发出系统命令,并且可以解析输出以获取mac地址.Java api可以ping IP但我不确定我们是否解析ping输出(某些库可以执行此操作)。 最好避免发布系统命令并找到替代解决方案,因为它不是平台独立的方式。