代码之家  ›  专栏  ›  技术社区  ›  tvanfosson

当我只知道远程系统的IP地址时,我如何获取它的MAC地址?

  •  4
  • tvanfosson  · 技术社区  · 17 年前

    我正在开发一个局域网唤醒服务,该服务将从网站运行,并应与许多不同的平台交互,因此,没有仅限Windows的解决方案。当用户在网站上注册他们的系统时,我需要获取MAC地址以用于构建 "magic" packet

    编辑: 我们确实建立了允许定向广播的网络基础设施,尽管弄清楚确切的广播地址是我需要解决的另一个难题,因为网络掩码并不总是/24。

    11 回复  |  直到 17 年前
        1
  •  4
  •   Matthew Whited    17 年前

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

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

    我已经有一段时间没有玩路由器和软件了,但这可能是使用SNMP查询内容的起点 http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml

        2
  •  2
  •   eeerahul Stalin Pimentel    14 年前

    使用以下内容:

    getmac /s destIp 
    

    获取远程会话的Mac地址。

        4
  •  1
  •   Patrick Gryciuk    17 年前

    你已经说了我能想到的一切。..

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

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

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

        5
  •  1
  •   tvanfosson    16 年前

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

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

        6
  •  0
  •   tputkonen    17 年前

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

        7
  •  0
  •   John Saunders    17 年前

    开始牺牲。

    除非没有路由器,否则在网络方面没有通用的方法来实现这一点。使用路由器时,您将永远看不到发起系统的MAC地址。

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

    事实上,你甚至确定你的“魔法包”(不管是什么)会通过路由器到达你想要它到达的系统吗?这听起来像是路由器或其他网络基础设施应该执行的功能。

        8
  •  0
  •   chepner    17 年前

    Mac地址仅在网段上使用,每次跳转时都会丢失。端到端只保留IP,即使如此,在Nated时,from IP地址也会被重写。我想我的答案是,除非所有东西都在同一网段上,或者你的路由器都设置了代理arp(这是不现实的),否则是不可能的。

        9
  •  0
  •   Community Mohan Dere    9 年前

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

    顺便说一句,有很多 similar question 已经在SO上了。

        10
  •  0
  •   Chris Thornton    17 年前

    如果是windows系统,您可以使用NBTSTAT-a 这将返回netbios信息,IP就在那里

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

    DHCP服务器是个好主意

    查找IP,MAC就会在那里。 您可能需要编写一个小批量文件。

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

        11
  •  0
  •   Sandeep    16 年前

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

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

    礼貌: Professor Saleem Bhatti

    推荐文章