Назад | Перейти на главную страницу

как получить 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.

Можно ли получить MAC-адрес удаленной системы из командной строки, PowerShell или чего-то еще? Какие условия нужно поставить? Спасибо.

MAC-адреса - это объекты Ethernet, а не Интернета. У компьютера даже не обязательно должен быть MAC-адрес. Единственный способ получить MAC-адрес - это подключить какой-нибудь компьютер к той же локальной сети, что и этот компьютер, чтобы сообщить его вам. И у вас не было бы возможности узнать, что он давал вам правильную информацию.

Если вы двое находитесь в одной локальной сети Ethernet, вы можете просто ping компьютер, а затем загляните в свою таблицу ARP. В противном случае вам придется запросить компьютер в той же сети Etherent / Wifi.

Вы можете получить его из 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

Nmap вернет MAC-адрес, а также все, что вам нужно знать.

Если у вас есть доступ администратора к машине, PowerShell и WMI очень полезны для получения удаленной диагностики. У них обоих есть обширная документация на сайте technet.microsoft.com.

edit: это предполагает машину с Windows, которая, судя по всему, может не быть.

Ага. Самый простой способ - просто выполнить пинг, а затем проверить таблицу ARP.

Если вас больше интересует инвентаризация и составление отчетов, я бы посоветовал взглянуть на бесплатное программное обеспечение от Spiceworks ( http://www.spiceworks.com ), чтобы установить постоянный мониторинг и всегда иметь доступ к вашей информации обо всем вашем окружении.

Я использовал его годами, и он отлично работает в локальной сети.

У него есть некоторые проблемы с отправкой инвентаря ocf sofwtare на удаленные сайты, хотя еще не понял почему, но помимо этого я очень рекомендую его.

Если вы знаете имя компьютера, простой способ будет:

$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"
     }
}

MAC - это уровень 2 OSI - вы не получите его напрямую, когда между ними есть какой-либо переход уровня 3 - и по соображениям безопасности все протоколы, запрашивающие такие данные, не должны быть разрешены ни в чем, кроме локальной сети ...

Хотя то, что указано выше, немного сложнее, если у вас не найдено записей после пинга, вам необходимо включить маршрутизацию и удаленный доступ в службах, вероятно, он отключен. Затем перейдите в командную строку и введите arp -a чтобы увидеть ваш кеш, используйте arp -a <IP> для этого MAC-адреса машины.

Вы можете попробовать это:

nbtstat -A 192.168.2.41

Вы получите удаленный MAC-адрес в (довольно подробном) сгенерированном ответе.

Я знаю, что вопрос не касался ни одной доменной системы, однако для тех, кто может наткнуться на это, поиск примеров компьютеров домена ниже - это быстрый и простой способ сделать это.

в окнах вы можете просто сделать следующее

    $c = "computername" 
    Invoke-Command -ComputerName $c -ScriptBlock {

    getmac 
    }

просто запускает базовую команду командной строки в удаленной системе и возвращает данные.

"nmap -v -A [имя хоста / IP-адрес]" может быть вашим лучшим выбором; ОС UNIX для клиента может иметь это изначально; но nmap также доступен для клиентов Windows ...