12 networking bios tcp mac-address
如何发现网络中机器的 MAC 地址?
我需要发现只安装了 BIOS(没有操作系统)的机器。
我需要找到正在运行的机器的 MAC 地址。
如果机器没有通电,这是不可能的。
如果它们通电,我想这也是不可能的,因为您需要一个最小的网络堆栈来至少回答 ARP 查询等问题,如果没有安装操作系统就无法工作。
可行的方法(我不知道,现在无法测试)是当 NIC 插入或通电时 NIC 和交换机进行通信,并且交换机以这种方式学习 MAC 地址。如果是这种情况,您将需要一个可管理的交换机并查询其连接的 mac 地址。
您可以使用Nmap使用以下语法进行非常快速的 ARP 扫描。
nmap -sn -PR -oX nmap.xml 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
这使用 ARP ping(仅 ARP 请求,无 ICMP、UDP 或 TCP,无端口扫描)来扫描指定的 IP 地址范围并在 XML 文件 (nmap.xml) 中记录 IP 地址/MAC 地址/主机名响应。
我编写了一个PowerShell脚本来处理 XML 文件并输出一个CSV文件。这也过滤掉了停机的主机。我发现这在 Excel 中比在 XML 文件中更容易使用。如果有人感兴趣,这是脚本。
# 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
Run Code Online (Sandbox Code Playgroud)