如何发现网络中机器的MAC地址?


Answers:


8

您将必须访问托管交换机上的可用信息。如果您的网络不受管理,那么我看不到这样做的方法。

这是假设目标计算机具有局域网唤醒(WoL)能力。在这种情况下,将建立到服务器的链接(寻找闪烁的链接LED),并且网卡正在收听WoL广播。AFAIK,该卡在这种状态下不应答任何东西。如果没有任何WoL,则该卡很可能已关闭(无链接LED),并且根本无法使用。


7

如果机器未通电,则这是不可能的。

如果它们已加电,我想这也是不可能的,因为您需要一个最小的网络堆栈来至少回答ARP查询等问题,而这在没有安装OS的情况下是行不通的。

可能有效的方法(我现在不知道并且无法测试)是,当NIC插入或接通电源时,NIC和交换机进行通信,并且交换机以此方式学习MAC地址。如果是这种情况,您将需要一个可管理的开关并向其查询已连接的mac地址。


2
可能会,如果它的要求BOOTP或PXE引导得到它没有网络堆栈。我认为这取决于机器是否可以正常工作。
巴特·

6

您可以使用Nmap使用以下语法进行非常快速的ARP扫描。

nmap -sn -PR -oX nmap.xml 192.168.1.0/24

这使用ARP ping(仅ARP请求,无ICMP,UDP或TCP,无端口扫描)扫描指定的IP地址范围,并将IP地址/ MAC地址/主机名响应记录在XML文件(nmap.xml)中。

我编写了一个PowerShell脚本,用于修改XML文件并吐出CSV文件。这也会过滤掉出现故障的主机。我发现这比XML文件更容易在Excel中使用。如果有人感兴趣,这是脚本。

# Define nmap input file
$NmapXMLFile = ".\nmap.xml"

# Initialize object array
$HostItems = @()

# Initialize index
$x = 0

# Load XML
[xml]$NmapXML = Get-Content $NmapXMLFile

# Loop through XML
ForEach ($HostNode in $NmapXML.nmaprun.host) {

  # Check host status
  If ($HostNode.status.state -eq "up") {

    # Create host object
    $HostObj = "" | Select-Object ID, Hostname, 'IP Address', 'MAC Address', Vendor

    # Store ID and increment index
    $HostObj.ID = $x += 1

    # Store hostname
    $HostObj.Hostname = $HostNode.hostnames.hostname.name

    # Loop through addresses
    foreach ($HostAddress in $HostNode.address) {

      # Check IP address
      If ($HostAddress.addrtype -eq "ipv4") {

        # Store IP address
        $HostObj.'IP Address' = $HostAddress.addr
      }

      # Check MAC address
      If ($HostAddress.addrtype -eq "mac") {

        # Store MAC address
        $HostObj.'MAC Address' = $HostAddress.addr

        # Store vendor
        $HostObj.Vendor = $HostAddress.vendor
      }
    }

    # Append host object to array
    $HostItems += $HostObj
  }
}

# Print host items
$HostItems

# Export host items to CSV
$HostItems | Export-CSV -NoType .\nmap.csv

我尝试了上面的命令,并得到了错误Scantype n not supported。显然-sn,Nmap 4.x不支持该标志。
Stefan Lasiewski'2

来自nmap 5.30BETA1 ChangeLog:
John Homer

2
分别切换为-Pn和-sn并分别作为跳过ping扫描和跳过端口扫描的首选语法。以前,建议使用-PN和-sP选项。这为禁用扫描阶段的某些选项建立了更规则的语法:-n没有反向DNS -Pn没有主机发现-sn没有端口扫描我们还感到旧的-sP(“ ping扫描”)选项有点误导因为即使禁用端口扫描,当前版本的Nmap仍可以走得更远(包括-sC和--traceroute)。在可预见的将来,我们将保留对先前选项名称的支持。
约翰·荷马

因此,基于此,您应该能够使用'-sP'语法代替较新的'-sn'参数。不幸的是,我没有要测试的nmap4版本。
约翰·荷马

3
  1. 如果交换机足够先进,请查看您的交换机/路由器上的信息。
    (在Cisco交换机中,命令为show mac-address-table)。
  2. 如果计算机具有启用了PXE的BIOS /网卡,请从DHCP日志中读取信息,因为它们将尝试获取DHCP租约。如果没有DHCP,只需使用Wireshark转储所有广播流量并过滤DHCP流量。所有没有操作系统的新供电机器将显示流量。

3

在Unix机器上,侦听同一LAN上的无操作系统计算机,如果可能的话,通过集线器(不是交换机),您可以尝试

arp
cat /proc/net/arp

另外,您可能想尝试wireshark(从OS操作系统的计算机上尝试)。同样,最好使用集线器以捕获来自BIOS机器的任何通信,包括广播。


1

这里的基本问题是这是第2层信息,因此只有交换机才能看到它。某些交换机将提供一个接口,可让您查看此信息,但是,如果不是唯一的途径,则可以通过在交换机之间安装集线器来拦截物理层中的信息。

如果您使用的是网管型交换机,则此信息很可能可以从交换机获得。某些最终用户集成的路由器/交换机(例如通常同时包装ADSL调制解调器的路由器/交换机)有时会具有包含MAC地址的DHCP客户端列表。

如果您使用的是非托管型交换机,并且您确实想知道此信息,建议您购买一个集线器,并暂时将其替换。然后,您可以将运行Wireshark的计算机连接到集线器,并捕获ARP数据包以记录MAC地址。或者,您可以使用Echolot为您执行此操作-它有选择地跟踪ARP数据包并建立MAC地址数据库。


编辑-只需重新阅读有关它们仅适用于BIOS的部分。除了拦截第2层数据的问题之外,这还带来了其他挑战-客户端甚至可能不会通过网络发送任何数据。如果客户端具有执行DHCP或发送ARP数据包的BIOS,则应该可以从交换机看到它们。我不确定哪些BIOS版本支持此功能,不过我知道有些功能可以。
imoatama'9


1

您可以在2秒钟内完成的一个非常简单的小技巧就是,任何操作系统都使用与之交互的任何设备的mac和IP地址写入一个表。这称为ARP TABLE。那么问题是如何强制与所有设备进行交互?您可以简单地ping广播IP地址。这并不完美,因为某些设备或防火墙可能会阻止ICMP ping请求,但是它在许多情况下都可以使用。

这些命令是(在ipv4 192.168.0.255广播地址中):

ping 192.168.0.255

在Linux中使用:

ping -b 192.168.0.255

等待几秒钟以使设备做出响应,然后执行以下操作:

arp -a

对于IPV6 ping,请参阅Giedrius Rekasius评论

不是完美的,但是没有工具,没有研究,没有时间的浪费,它可以在每个主要操作系统中运行并且很快。


我发现通过IPv6进行此类ping比通过IPv4进行ping更容易,更可靠。一个示例命令可能看起来像这样ping6 -c2 -n ff02::1%wlan0。只需更新要使用的网络接口的名称即可,用于此目的的IP地址始终ff02::1与您所处的网络无关。
kasperd 2014年

1

使用Nmap扫描网络,然后检查ARP表(arp -a在Linux发行版中)。



0

我本来建议交换机MAC地址表,但是上面已经有人提到过。

如果有任何一台计算机正在运行操作系统并具有IP地址,则可以连接到同一LAN,也可以使用http://nmap.org/中的 NMAP(或GUI版本,例如Zenmap)...如果运行,在同一LAN上,您应该获得任何响应计算机的MAC地址信息。

如果有更好的方法获得相同的结果,那么更多地了解为什么需要获取MAC地址将很有用。


0

您可以使用例如连续运行的arpalert收集ARP信息。这样,您将在启动后看到一组ARP地址。

关闭电源的计算机将不会向您发送ARP答复。

为了加快该过程,您可以从运行arpalert的服务器上对网络使用nmap ping扫描(nmap -sP),以触发所有可能的(活动的和正在运行的)主机来响应您的arp查询。稍后定期运行nmap ping扫描,您有更好的机会抓住一个短命的主机。

来自arpalert的摘要:

如果MAC不在列表中,则arpalert将使用MAC地址和IP地址作为参数启动预定义的用户脚本。

nmap的片段:

Nmap(“网络映射器”)是一种免费的开源(许可证)实用程序,用于网络探索或安全审核

在这里看看:


0

我使用:nmap -sP 192.168.1.1/24

(用您的IP范围替换192.168.1.1/24)

它只会向您显示启动的计算机,并为您提供类似以下信息:

[root@x ~]# nmap -sP 192.168.1.1/24
Starting Nmap 6.40 ( http://nmap.org ) at 2014-11-22 14:20 EST
Nmap scan report for 192.168.1.1
Host is up (0.0019s latency).
MAC Address: ZZ:ZZ:54:2E:E9:B4 (Unknown)
Nmap scan report for 192.168.1.33
Host is up (0.035s latency).
MAC Address: ZZ:ZZ:FA:2D:D7:D8 (Intel Corporate)
Nmap scan report for 192.168.1.254
Host is up (0.0020s latency).
MAC Address: ZZ:ZZ:31:02:98:19 (Asustek Computer)
Nmap scan report for 192.168.1.34
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 1.88 seconds

如果没有安装操作系统,则可以使用linux live cd,nmap可能在大多数操作系统中都可用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.