如何获取远程计算机的MAC地址

如何获取远程计算机的MAC地址

我有特殊情况。我想从不在域中的远程计算机获取 MAC 地址。我知道远程计算机的主机名和 IP 地址。我的计算机的 IP 地址是 192.168.2.40,远程计算机 IP 是 192.168.2.41。

我试过了:

arp -a <remote IP Address>
No ARP entries found.

nbtstat -n <remote hostname>
Host not found.

getmac /s <remote IP Address>
ERROR: The RPC server is unavailable.

是否可以通过命令行、powershell 或其他方式获取远程系统的 MAC 地址?需要设置哪些条件?谢谢。

答案1

nmap将返回 MAC 地址以及您想知道的其他任何信息。

如果您拥有机器的管理员权限,powershell 和 wmi 都非常适合进行远程诊断。它们在 technet.microsoft.com 上都有大量文档

编辑:这假设是一台 Windows 机器,但从外观上看,可能不是。

答案2

MAC 地址是以太网的东西,不是互联网的东西。计算机甚至不需要 MAC 地址。获取 MAC 地址的唯一方法是让与该计算机位于同一 LAN 上的某台计算机告诉您。而且您无法知道它是否为您提供了正确的信息。

如果你们两个在同一个以太网局域网中,那么你可以只询问ping计算机,然后查看你的 ARP 表。否则,你必须询问同一个以太网/Wifi 局域网中的计算机。

答案3

您可以从 WMI 获取它,并且任何可以读取 WMI 的语言都能够访问它。VBScript、JScript、Perl、Python 和 Powershell 都可用于获取它。

由于你特别询问了 Powershell,下面是来自http://www.neolisk.com/techblog/powershell-getmacaddressofanyremoteip

param ( $Computer , $Credential )
#to make it work without parameters
if($Computer -eq $null) { $Computer = $env:COMPUTERNAME }
#program logic
$hostIp = [System.Net.Dns]::GetHostByName($Computer).AddressList[0].IpAddressToString
if($Credential) {
    $Credential = Get-Credential $Credential
    $wmi = gwmi -Class Win32_NetworkAdapterConfiguration -Credential $Credential -ComputerName $Computer
} else {
    $wmi = gwmi -Class Win32_NetworkAdapterConfiguration -ComputerName $Computer 
}
return ($wmi | where { $_.IpAddress -eq $hostIp }).MACAddress

答案4

如果您知道计算机的名称,最简单的方法是:

$strComputer ="ComuterName"
$colItems = Get-WmiObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName $strComputer -Filter "IpEnabled = TRUE"
ForEach ($objItem in $colItems)
{
    write-host "IP Address: " $objItem.IpAddress[0]  "Mac: " $objItem.MacAddress
}

更高级的脚本可以通过 IP 或主机名获取任何机器:

$device = "192.168.106.123"
if ( $device | ? { $_ -match "[0-9].[0-9].[0-9].[0-9]" } )
{
    echo "Searching MAC by IP"
    $ip = $device
} 
else 
{
    echo "Searching MAC by host"
    $ip = [System.Net.Dns]::GetHostByName($device).AddressList[0].IpAddressToString
}
    $ping = ( new-object System.Net.NetworkInformation.Ping ).Send($ip);


if($ping){
    $mac = arp -a $ip;

    ( $mac | ? { $_ -match $ip } ) -match "([0-9A-F]{2}([:-][0-9A-F]{2}){5})" | out-null;

    if ( $matches )
     {
        $matches[0];
    } else 
    {
      echo "MAC Not Found"
     }
}

相关内容