So erhalten Sie die MAC-Adresse des Remotecomputers

8

Ich habe eine bestimmte Situation. Ich möchte die MAC-Adresse von einem Remotecomputer erhalten, der sich nicht in der Domäne befindet. Ich kenne den Hostnamen und die IP-Adresse des Remotecomputers. Die IP-Adresse meines Computers lautet 192.168.2.40 und die IP-Adresse des Remotecomputers lautet 192.168.2.41.

Ich habe es versucht:

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.

Ist es möglich, die MAC-Adresse des Remote-Systems über die Befehlszeile, Powershell oder etwas anderes abzurufen? Welche Bedingungen müssen festgelegt werden? Vielen Dank.

Culter
quelle
ipconfig / all?
SpacemanSpiff
Haben Sie es gerade arp -amit anderen Parametern versucht ?
ott--
ott, welcher Parameter ist auch nützlich, um die Mac-Adresse zu erhalten?
Culter
@culter Besser spät als nie. Ich meinte arp -aohne andere Parameter.
ott--

Antworten:

6

nmap gibt die MAC-Adresse sowie fast alles andere zurück, was Sie wissen möchten.

Wenn Sie Administratorzugriff auf das Gerät haben, sind Powershell und WMI beide sehr nützlich, um eine Ferndiagnose zu erhalten. Beide haben eine umfangreiche Dokumentation unter technet.microsoft.com

Bearbeiten: Dies setzt eine Windows-Maschine voraus, was anscheinend nicht der Fall ist.

jhayes
quelle
2
Er hat die Frage mit Windows und Powershell
markiert
1
wahr, aber basierend auf den Rückgabewerten bin ich nicht überzeugt, dass das Ziel Windows ist. Könnte einfach gesperrt werden, wäre nmap -v -A 192.168.2.41 hilfreich.
Jhayes
1
Die Computer basieren auf Windows, aber es gibt nmap für Windows und es funktioniert gut. Nmap war das einzige Tool, das in dieser Situation funktioniert. Vielen Dank.
Culter
7

MAC-Adressen sind Ethernet-Dinge, keine Internet-Dinge. Ein Computer muss nicht einmal eine MAC-Adresse haben. Die einzige Möglichkeit, die MAC-Adresse abzurufen, besteht darin, einen Computer im selben LAN wie diesen Computer zu benachrichtigen. Und Sie hätten keine Möglichkeit zu wissen, dass es Ihnen die richtigen Informationen gab.

Wenn Sie sich beide im selben Ethernet-LAN ​​befinden, können Sie nur pingden Computer verwenden und dann in Ihrer ARP-Tabelle nachsehen. Andernfalls müssten Sie einen Computer im selben Etherent / Wifi-LAN fragen.

David Schwartz
quelle
Bitte erläutern Sie die Ablehnung, damit ich die Antwort verbessern kann.
David Schwartz
2
Weil es mindestens ein Dutzend Möglichkeiten gibt, die MAC-Adresse eines Remotecomputers mit Tools wie psexec, PowerShell mit Get-WMIObject oder Invoke-Command, wmic usw.
abzurufen
1
@MDMarra: Deshalb habe ich gesagt: "Die einzige Möglichkeit, die MAC-Adresse zu erhalten, besteht darin, einen Computer im selben LAN wie diesen Computer zu finden, um sie Ihnen mitzuteilen."
David Schwartz
3
@gWaldo: Ich stehe zu beiden. Direkt hinter mir befindet sich ein Computer mit einer gebrochenen T1-Verbindung und keinen anderen Netzwerkschnittstellen. Es hat keine MAC-Adresse, sondern eine Internetverbindung. Und bitte sagen Sie mir, wie Sie feststellen können, ob ein Remotecomputer Ihnen eine korrekte MAC-Adresse und keine unsinnige Adresse mitteilt.
David Schwartz
3
Ich bin damit einverstanden, dass ein MAC keine Voraussetzung für die IP-Konnektivität ist, wenn Sie kein Ethernet verwenden. Dies ist absolut richtig, aber Sie können nicht vertrauen, was WMI zurückgibt, da der MAC etwas weit hergeholt ist. Wenn Sie eine solche Randhaltung einnehmen wollen, sollten Sie sie im Detail verteidigen und nicht nur erwarten, dass die Menschen Ihre Minderheitensicht als Wahrheit akzeptieren. Wie ist es möglich, einen Windows-Client so zu konfigurieren, dass eine WMI-Abfrage einen anderen Wert für die MAC-Adresse zurückgibt als den, den der Netzwerkstapel für dieselbe Netzwerkkarte verwendet?
MDMarra
6

Sie können es von WMI erhalten, und jede Sprache, die WMI lesen kann, kann darauf zugreifen. VBScript, JScript, Perl, Python und Powershell können verwendet werden, um darauf zuzugreifen.

Da Sie speziell nach Powershell gefragt haben, finden Sie hier ein Beispiel von 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
gWaldo
quelle
1
Ich kann es nicht zum Laufen bringen. Wenn ich den Namen des Computers zu $ ​​computer hinzufüge, ist die Ausgabe nichts.
Culter
3

ja. Der einfachste Weg sollte darin bestehen, nur einen Ping durchzuführen und dann die ARP-Tabelle zu überprüfen

Wenn Sie mehr daran interessiert sind, Dinge zu inventarisieren und zu melden, würde ich empfehlen, einen Blick auf die kostenlose Software von Spiceworks ( http://www.spiceworks.com ) zu werfen, um eine konstante Überwachung einzurichten und Ihre Informationen immer leicht verfügbar zu haben Enivorenment.

Ich habe es jahrelang benutzt und es funktioniert großartig im LAN.

Es gibt zwar einige Probleme beim Senden von Inventar von Software an entfernte Standorte, ich habe noch nicht wirklich herausgefunden, warum, aber abgesehen davon kann ich es nur empfehlen.

Juha Jurvanen
quelle
Dank Finnland, meinem Lieblingsland voller großartiger Metal-Bands;) Das werde ich überprüfen.
Culter
2

Wenn Sie wissen, wie der Name des Computers lautet:

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

Fortgeschritteneres Skript, das jeden Computer nach IP oder Hostname aufnehmen kann:

$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"
     }
}
ahaw
quelle
2

MAC ist OSI Layer 2 - Sie erhalten es nicht direkt, wenn dazwischen ein Layer 3-Hop liegt - und aus Sicherheitsgründen sollten alle Protokolle zum Abfragen solcher Daten in nichts außerhalb des eigenen LANs zulässig sein ...

Truebsalgeblaese
quelle
2

Das oben Gesagte ist zwar etwas zu kompliziert, aber wenn Sie nach einem Ping keine Einträge gefunden haben, müssen Sie das Routing und den Remotezugriff in Diensten aktivieren. Es ist wahrscheinlich deaktiviert. Gehen Sie dann zu einer Eingabeaufforderung und geben Sie eine aus arp -a, um Ihren Cache anzuzeigen. Verwenden Sie diese Option arp -a <IP>für die Mac-Adresse des Computers.

ChrisW
quelle
Entschuldigung, was meinst du mit "was ist oben"? Wenn Sie sich auf eine andere Antwort beziehen, geben Sie dies bitte genauer an, da Ihre Antwort möglicherweise von selbst oder in einer anderen Reihenfolge angezeigt wird.
Andrew Schulman
1
Schauen Sie sich nur die Länge an, bis zu der dieses Thema reicht. Alles was benötigt wird ist arp -a <IP> und AHAW hat mit Code geantwortet. während schön etwas überkompliziert.
ChrisW
Mein Punkt ist nur, dass "oben" bedeutungslos ist, wenn Ihre Antwort von selbst oder in einer unbekannten Reihenfolge mit anderen Antworten erscheint. Bitte sei spezifischer.
Andrew Schulman
1

Sie könnten dies versuchen:

nbtstat -A 192.168.2.41

Sie erhalten die Remote-Mac-Adresse in der (ziemlich ausführlichen) generierten Antwort.

ADieuNePlaise
quelle
1

Ich weiß, dass die Frage für keine Domain-Systeme gestellt wurde, aber für diejenigen, die auf die Suche nach Beispielen für Domain-Computer stoßen, ist dies eine schnelle und einfache Möglichkeit.

In Windows können Sie einfach Folgendes tun

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

    getmac 
    }

führt einfach einen grundlegenden Eingabeaufforderungsbefehl auf einem Remote-System aus und gibt die Daten zurück.

Ritter
quelle
0

"nmap -v -A [Hostname / IP-Adresse]" ist möglicherweise die beste Wahl. Unter UNIX OS für den Client ist es möglicherweise nativ verfügbar. nmap ist aber auch für Windows-Clients verfügbar ...

Jaro
quelle
Der Haken bei nbtstat ist, dass es nur für entfernte Windows-Computer funktioniert - nicht 100% sicher; Es erfordert auch einige Eingriffe in die Befehlssyntax ...
Jaro
Außerdem kann "getmac / s [Hostname / IP] nur auf den Remote-Windows-Zielen verwendet werden, für die RPC aktiviert ist, die remote verfügbar sind und für die Sie auch Remote-Administratorrechte auf dem System haben.
Jaro
Einige andere Netzwerkscanner (Nessus, Nexpose, Metasploit) können diese Daten möglicherweise auch für Sie melden ...
Jaro
Willkommen bei Serverfehler! Wenn Sie möchten, können Sie Ihre Antwort nach dem Erstellen bearbeiten, um zusätzlichen Inhalt hinzuzufügen. Dies sieht viel besser aus als Kommentare.
Falcon Momot