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

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

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

    我正在开发一个唤醒局域网服务,它将从一个网站上运行,并应与许多不同的平台交互-因此,没有仅限Windows的解决方案。当用户在网站上注册他们的系统时,我需要获取MAC地址来构造 "magic" packet . 我有一个Java小程序,它能为我做这件事,并且知道ActiveX控件可以工作,但是我想知道是否有一种方法可以通过查询路由器/交换机来完成这个服务器端。由于系统可能位于许多不同的物理子网中的任何一个子网上,因此使用ARP将不起作用——除非有一种方法可以配置路由器以代表我执行ARP。

    有谁知道任何网络API,无论是专有的还是其他的,都可以用来查找给定IP地址的MAC地址?我认为我们正在使用思科路由器,但它是一个复杂的网络,可能有多个供应商参与不同的层次。在我为网络之神做出牺牲之前,我想了解一些可能的解决方案的背景信息。如果技术上不可能的话,那就没有必要贬低自己。:-)

    编辑: 我们已经建立了允许定向广播的网络基础设施,但由于网络掩码不总是/24,所以计算出确切的广播地址是我需要解决的另一个难题。

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

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

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

    有一段时间了,我玩了路由器和开关,但这可能是使用SNMP查询什么的起点。 http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml

        2
  •  2
  •   eeerahul Arrj    13 年前

    使用以下内容:

    getmac /s destIp 
    

    获取远程会话MAC地址。

        3
  •  1
  •   ian    15 年前
        4
  •  1
  •   Patrick Gryciuk    15 年前

    你说了我能想到的一切…

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

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

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

        5
  •  1
  •   tvanfosson    15 年前

    目前,应用程序使用Java 6 applet,允许我从远程系统中提取主机名和MAC地址。我不喜欢对Java 6有依赖性,但是Snow Leopard和Windows都支持它,所以我很有可能会使用它。

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

        6
  •  0
  •   tputkonen    15 年前

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

        7
  •  0
  •   John Saunders    15 年前

    开始牺牲。

    就网络而言,没有一般的方法可以做到这一点,除非你没有涉及到路由器。如果涉及路由器,您将永远看不到源系统的MAC地址。

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

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

        8
  •  0
  •   chepner    15 年前

    MAC地址只在网段上使用,并在每个跃点丢失。只有IP是为端到端保留的,即使是这样,从IP地址在NATTED时也会被重写。我想我的答案是,除非所有的东西都在同一个网段上,或者你的路由器设置为代理ARP(这是不现实的)。

        9
  •  0
  •   Community pid    7 年前

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

    顺便说一下,有很多 similar question 已经这样了。

        10
  •  0
  •   Chris Thornton    15 年前

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

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

    DHCP服务器是个好主意

    如果它是本地的,你可以ping它然后快速运行arp-a 寻找IP,Mac就在那里。 您可能需要编写一个小的批处理文件。

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

        11
  •  0
  •   Sandeep    14 年前

    如上所述,如果主机在同一子网中,我们可以从已知的IP地址中获取MAC地址。首先对该IP执行ping操作;然后查看arp-a_grep,并在nix*上解析字符串以获取MAC地址。

    我们可以从所有编程语言标准API中发布系统命令,并且可以解析输出以获得MAC地址。JavaAPI可以ping IP,但是我不确定是否解析ping输出(一些库可以执行)。 最好避免发出系统命令,并找到另一种解决方案,因为它不是真正的独立于平台的方式。

    礼貌: Professor Saleem Bhatti