多NIC服务器下如何通过IP获取MAC地址?脚本异常求助
解决多NIC服务器IP与MAC匹配问题(基于PING关联)
当服务器存在多个启用的NIC时,直接提取IPAddress和MacAddress会返回数组,无法一一对应。利用PING结果关联IP与MAC的核心是先确定目标服务器的响应IP,再匹配对应的MAC地址,以下是两种可行方案:
方案一:通过本地ARP缓存获取(适合同子网场景)
先通过PING触发ARP缓存更新,再从缓存中提取对应IP的MAC:
# 执行PING,确保目标主机的ARP记录被更新 Test-Connection -ComputerName $i -Count 1 -Quiet | Out-Null # 解析目标主机的IPv4地址(若$i已是IP可跳过此步) $targetIP = [System.Net.Dns]::GetHostAddresses($i) | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | Select-Object -ExpandProperty IPAddressToString -First 1 # 从ARP缓存中提取对应IP的MAC地址 $MAC = Get-NetNeighbor -IPAddress $targetIP | Select-Object -ExpandProperty LinkLayerAddress -First 1 $IP = $targetIP
方案二:远程查询IP与MAC映射(跨子网场景通用)
直接在远程服务器上查询所有启用的网卡配置,关联PING目标IP对应的MAC:
# 获取远程服务器所有启用网卡的IP与MAC对应关系 $nicMapping = Get-CimInstance -CimSession $i -ClassName Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true } | Select-Object IPAddress, MACAddress # 解析PING目标的IPv4地址(若$i已是IP可跳过此步) $targetIP = [System.Net.Dns]::GetHostAddresses($i) | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | Select-Object -ExpandProperty IPAddressToString -First 1 # 匹配目标IP对应的MAC $matchedNic = $nicMapping | Where-Object { $_.IPAddress -contains $targetIP } $IP = $targetIP $MAC = $matchedNic | Select-Object -ExpandProperty MACAddress -First 1
关键说明
- 若
$i本身是IPv4地址,可省略DNS解析步骤,直接用$targetIP = $i - 方案一依赖本地ARP缓存,仅适合同子网内的服务器;跨子网时ARP缓存中只会记录网关MAC,此时必须用方案二
- 两种方案都能确保获取的IP与MAC是一一对应的,避免返回数组的问题
内容的提问来源于stack exchange,提问作者Nuisance
相关产品推荐
相关产品推荐

