4

我正在开发 LAN 唤醒服务,该服务将从网站运行并且应该与许多不同的平台进行交互 - 因此,没有仅限 Windows 的解决方案。当用户在网站上注册他们的系统时,我需要获取 MAC 地址以用于构建“魔术”数据包。我有一个能够为我执行此操作的 Java Applet,并且我知道 ActiveX 控件可以工作,但我想知道是否有办法通过查询路由器/交换机来执行此服务器端。由于系统可能位于许多不同的物理子网中的任何一个上,因此使用 ARP 将不起作用——除非有办法配置路由器以代表我执行 ARP。

任何人都知道任何网络 API,专有的或其他的,可用于查找给定 IP 地址的 MAC 地址?我认为我们正在使用 Cisco 路由器,但它是一个复杂的网络,并且可能涉及多个不同级别的供应商。在我去祭祀网络之神之前,我想了解一些可能的解决方案的背景信息。如果技术上不可行,那么自卑是没有意义的。:-)

编辑:我们确实设置了网络基础设施以允许定向广播,但由于网络掩码并不总是 /24 而找出确切的广播地址是我需要解决的另一个难题。

4

11 回答 11

4

如果您在使用 DHCP 的本地网络上,您可能能够查看服务器数据库以获取具有该地址的最后一个用户的 MAC。将来,您可以监视网络中的 ARP 请求并将响应缓存在某种表中。您还可以考虑使用 RMON 或 SNMP 来尝试查询交换机和路由器上的地址表。

应该注意的是,要跨路由器使用 WoL,您要么需要启用定向广播,要么需要在本地网段中有中继服务器。

自从我玩路由器和交换机以来已经有一段时间了,但这可能是使用 SNMP 查询的起点http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml

于 2009-05-27T19:22:40.190 回答
2

使用以下内容:

getmac /s destIp 

获取远程会话 Mac 地址。

于 2012-01-05T06:31:49.727 回答
1

我不知道这些是否有帮助,但请看一下:

http://www.webdeveloper.com/forum/showthread.php?t=134120

http://www.qualitycodes.com/tutorial.php?articleid=19

于 2009-05-27T19:28:37.230 回答
1

你把我能想到的都说了...

源 MAC 地址随着数据包从设备跳到设备而变化,因此除非客户端位于同一子网中,否则服务器将无法获取 MAC 地址。(你会通过 ARP 来做)

签名的 java 小程序或 activex 控件将是最简单的解决方案。它将能够(几乎被动地)获取您需要的所有网络信息(IE 甚至不会提示运行签名的小程序)

如果您完全了解正在使用该服务的网络,那么您可能可以通过 SNMP 或 CDP 查询网关的客户端列表。您将能够将 IP 地址映射到 MAC 地址......但这确实取决于供应商(但很常见),并且不会比拥有一个小程序更好(imo)。

于 2009-05-27T19:34:06.733 回答
1

目前,该应用程序正在使用 Java 6 小程序,它允许我从远程系统中提取主机名和 MAC 地址。我不喜欢这种对 Java 6 的依赖,但是 Snow Leopard 和 Windows 都支持它,所以我可能可以忍受它。

在相关方面,我们的网络人员向我寻求一些帮助,将一些现有代码转换为 ASP.NET。在谈话中,我问他们是否有实时的 MAC 地址信息(因为他们会根据可疑的网络活动——病毒/蠕虫关闭端口)。事实证明他们这样做了,我们也许可以利用这个项目来访问网络数据库中的信息。

于 2009-08-23T12:59:37.240 回答
0

我认为没有任何方法可以做到这一点。当 IP 数据包通过第一个路由器时,主机的 MAC 信息会丢失(您知道 MAC 仅用于以太网层)。如果最靠近您 PC 的路由器能够将远程 MAC 代码告诉您,那么它只会看到您的 PC 和“另一端”之间的下一个路由器的 MAC。

于 2009-05-27T19:22:49.643 回答
0

开始牺牲。

除非您不涉及路由器,否则在网络方面没有通用的方法可以做到这一点。如果涉及路由器,您将永远不会看到原始系统的 MAC 地址。

这假设始发系统只有一个网络接口,因此只有一个 MAC 地址。

事实上,您是否确定您的“魔术包”(无论是什么)会通过路由器到达您希望它到达的系统?这听起来像是路由器或其他网络基础设施应该执行的功能。

于 2009-05-27T19:23:03.497 回答
0

Mac地址只用在网段上,每跳都会丢失。仅保留 IP 用于端到端 - 即使这样,在 Natted 时也会重写来自 IP 地址。我想我的答案是,除非一切都在同一个网段上,或者您的路由器设置为代理 arp(这不太现实),否则这是不可能的。

于 2009-05-27T19:29:48.240 回答
0

您只能在同一网络上的机器的 ARP 表中获取 MAC 条目。如果您通过路由器连接到机器,那么您将只能在 ARP 表中看到路由器的 MAC 地址。因此,除非它是同一网络上的主机(不涉及路由器),否则无法知道外部主机的 MAC 地址。

顺便说一句,SO上已经有很多类似的问题。

于 2009-05-27T20:05:03.177 回答
0

如果是 Windows 系统,您可以使用 NBTSTAT -A 这将返回 netbios 信息并且 IP 在那里

任何管理系统(如 SMS 或 Altiris)都会有此信息

DHCP 服务器是个好主意

如果它是本地的,您可以 ping 它然后快速运行 ARP - 查找 IP 并且 MAC 将在那里。您可能需要编写一个小批处理文件。

如果您有权访问 PC,则可以使用 WMI 通过 DHCP 访问 Nic 的信息。

于 2009-05-28T00:40:49.313 回答
0

如上所述,如果该主机位于同一子网中,我们可以从已知 IP 地址获取 MAC 地址。首先ping那个ip;然后看看 arp -a | grep 并解析 nix* 上的字符串以获取 mac 地址。

我们可以从所有编程语言标准 API 发出系统命令,并可以解析输出以获取 mac 地址。Java api 可以 ping 一个 IP,但我不确定我们是否解析 ping 输出(某些库可以做到)。最好避免发出系统命令并找到替代解决方案,因为它不是真正的平台独立方式。

礼貌:萨利姆·巴蒂教授

于 2010-07-01T17:49:12.723 回答