У меня конкретная ситуация. Я хочу получить 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 ...