You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:05:14