如何发现网络中机器的MAC地址?
我需要发现仅安装BIOS(无操作系统)即可使用的计算机。
而且我需要找到启动的计算机的MAC地址。
如何发现网络中机器的MAC地址?
我需要发现仅安装BIOS(无操作系统)即可使用的计算机。
而且我需要找到启动的计算机的MAC地址。
Answers:
您可以使用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不支持该标志。
这里的基本问题是这是第2层信息,因此只有交换机才能看到它。某些交换机将提供一个接口,可让您查看此信息,但是,如果不是唯一的途径,则可以通过在交换机之间安装集线器来拦截物理层中的信息。
如果您使用的是网管型交换机,则此信息很可能可以从交换机获得。某些最终用户集成的路由器/交换机(例如通常同时包装ADSL调制解调器的路由器/交换机)有时会具有包含MAC地址的DHCP客户端列表。
如果您使用的是非托管型交换机,并且您确实想知道此信息,建议您购买一个集线器,并暂时将其替换。然后,您可以将运行Wireshark的计算机连接到集线器,并捕获ARP数据包以记录MAC地址。或者,您可以使用Echolot为您执行此操作-它有选择地跟踪ARP数据包并建立MAC地址数据库。
这是一个对我有用的解决方案:
您可以在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评论
不是完美的,但是没有工具,没有研究,没有时间的浪费,它可以在每个主要操作系统中运行并且很快。
ping6 -c2 -n ff02::1%wlan0
。只需更新要使用的网络接口的名称即可,用于此目的的IP地址始终ff02::1
与您所处的网络无关。
正如其他人所说,如果您拥有不受管理的交换机或BootP / PXE,则没有简单的方法来获取没有操作系统的计算机的MAC。
如果正在运行的计算机正在运行Windows,则很容易编写脚本(通常通过WMI)
这里有很多示例:http : //gallery.technet.microsoft.com/ScriptCenter/zh-cn/site/search?f[0].Type=SearchText&f[0].Value=MAC+address&x=0&y= 0
我本来建议交换机MAC地址表,但是上面已经有人提到过。
如果有任何一台计算机正在运行操作系统并具有IP地址,则可以连接到同一LAN,也可以使用http://nmap.org/中的 NMAP(或GUI版本,例如Zenmap)...如果运行,在同一LAN上,您应该获得任何响应计算机的MAC地址信息。
如果有更好的方法获得相同的结果,那么更多地了解为什么需要获取MAC地址将很有用。
您可以使用例如连续运行的arpalert收集ARP信息。这样,您将在启动后看到一组ARP地址。
关闭电源的计算机将不会向您发送ARP答复。
为了加快该过程,您可以从运行arpalert的服务器上对网络使用nmap ping扫描(nmap -sP),以触发所有可能的(活动的和正在运行的)主机来响应您的arp查询。稍后定期运行nmap ping扫描,您有更好的机会抓住一个短命的主机。
来自arpalert的摘要:
如果MAC不在列表中,则arpalert将使用MAC地址和IP地址作为参数启动预定义的用户脚本。
nmap的片段:
Nmap(“网络映射器”)是一种免费的开源(许可证)实用程序,用于网络探索或安全审核
在这里看看:
我使用: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可能在大多数操作系统中都可用