Batch-Datei, um MAC-Adressen von (mehreren) anderen Rechnern auszulesen

  • #1
F

format_c

Mitglied
Themenersteller
Dabei seit
02.07.2010
Beiträge
5
Reaktionspunkte
0
Hallo an alle!
Einen ählichen Thread gab es schon vor ein paar Jahren (), aber das Problem kann für manche Benutzer noch aktuell sein. Ich habe mich erst vor kurzem mit dieser Problematik beschäftigt. Möchte jetzt meine Erfahrungen mit anderen teilen.
Für andere Rechner im Netz habe ich so eine Batch geschrieben:

Code:
rem @echo off
FOR /F %%A in (names.txt) do (
  FOR /F tokens=2 delims=[] %%I in ('ping %%A -n 1 -4 -w 650') do (
    IF ERRORLEVEL 0 (
      FOR /F skip=3 tokens=1,2 %%E in ('arp -a') do (
        IF %%I == %%E (echo %%A	%%F
        echo %%A	%%F >> name2mac.txt)
      )
    ) ELSE (echo %%A ist offline
      echo %%A		#-o-f-f-l-i-n-e-# >> name2mac.txt)
  )
)

Auf Windows 7 funktioniert die Erkennung des Errolevels nicht so, wie ich es mir vorstelle. Kann es leider nicht erklären. Ist aber nicht besonders tragisch, weil die Konsequenz davon ist, dass der Rechner in der Ziel-Liste einfach nicht auftaucht.
Die Rechnernamen müssen in eine Textdatei (z.B. names.txt) eingetragen werden, ein Rechner pro Zeile. Wichtig: die Batch funktioniert nur mit Computernamen. Wenn man stattdessen IP-Adressen benutzen will, muss man die Delimeter in der FOR-Schleife entsprechen anpassen.

Es gibt noch ein Tool von MS, es heißt getmac. Es funktioniert aber auf der Remote-Prozedur-Aufruf-Ebene und setzt Administratoren-Rechte voraus.
 
  • #3
Das Tool ist _NICHT_ von MS....
 
  • #6
twoday schrieb:
Das Tool ist _NICHT_ von MS....
Das kann gut sein, so genau weiß ich das nicht. Ich stand zu dem Zeitpunkt, als ich es gepostet habe, unter Zeitdruck, wie man es an meinen Tippfehlern sehen kann. :) Ich meinte eher, dass es Teil des Betriebssystems (ab XP Prof.) ist, also einfach in der Eingabeaufforderung getmac /? eingeben. Wer es nicht hat, braucht nur danach zu googeln.

Das obige Skript ist die Version 2.0 von meinem Batch-Skript. Die erste hat die MAC-Adressen von getmac bezogen. Doch dann sind mir einige Nachteile dieser Methode aufgefallen, und ich bin auf die Abfrage des ARP-Caches umgestiegen.

Der Vorteil bei der Abfrage des ARP-Caches ist, dass es a) schneller funktioniert und b) man nicht einen Administrator-Zugang zum jeweiligen Rechner braucht; mehr als das: die Methode ist gar Plattformunabhängig. Wenn man (bei der getmac-Methode) nicht auf jedem Rechner das gleiche Benutzerkonto mit Administrator-Rechten hat, hat die Batch keinen Zweck mehr, denn der Sinn der Sache ist ja, dass die Abfrage automatisch erfolgt, ohne dass sich ein Mensch einmischen muss.

Der Nachteil der ARP-Methode könnte sein, dass es nur im lokalen Netz funtioniert, also dass wenn der Zielrechner um ein paar Ecken (sprich: Router) liegt, man nicht die wahre MAC-Adresse des Zielrechners bekommt, sondern die des Routers. Das habe ich noch nicht getestet.

Grüße
format_c
 
  • #7
@fee:
URl gibt es keine - aber schau einfach in den Source des Skripts, da steht ganz deutlich, woher es stammt...

@format_c:
Haste mal auf das Datum von getmac geschaut?
Da hat noch keiner an Windows 7 gedacht, ergo kaum verwunderlich, das es nicht so reibungslos läuft...
 
  • #8
Evtl. meint die Fee das Windows-integrierte getmac?

Code:
C:\>getmac -?

GETMAC [/S System [/U Benutzername [/P [Kennwort]]]] [/FO Format] [/NH] [/V]

Beschreibung:
  Dieses Programm ermöglicht Administratoren, die MAC-Adresse
  der Netzwerkadapter eines Computers anzuzeigen.

Parameterliste:
  /S  System       Remotesystem für die Verbindungsherstellung.

  /U  [Domäne\]Benutzer Bestimmt den Benutzerkontext, unter
               dem der Befehl ausgeführt wird.

  /P  [Kennwort]     Bestimmt das Kennwort für den Benutzerkontext.
               Auslassung fordert zur Kennworteingabe auf.

  /FO  Format       Bestimmt das Format, in
               dem die Ausgabe angezeigt wird.
               Gültige Werte: TABLE, LIST und CSV.

  /NH           Legt fest, dass der Spaltenheader nicht
               in der Ausgabe angezeigt wird.
               Gilt nur für die Formate TABLE und CSV.

  /V            Zeigt die ausführliche Ausgabe an.

  /?            Zeigt diese Hilfe an.
 
  • #9
@twoday
Ich habe nie behauptet, dass es Probleme mit getmac unter Windows 7 gäbe. Du hast zwei verschiedene voneinander unabhängige Aussagen von mir in eine Verbindung gebracht, die es nicht gibt. Das eine war das mit dem Errorlevel unter Windows 7 und das andere, dass ich für das Skript ursprünglich getmac verwendet habe. Das eine hat mit dem anderen nichts zu tun.
Wie man es dem Skript entnehmen kann, wird der Errorlevel nach dem ping abgefragt. So wollte ich erreichen, dass das Skript es erkennt, wenn eine Maschine offline ist. In der Ausgangsdatei würde dann gegenüber dem Hostnamen anstelle der MAC-Adresse die Zeichenkette #-o-f-f-l-i-n-e-# erscheinen (17 Zeichen lang, wie die MAC-Adresse selbst). Unter Windows 7 funktioniert das irgenwie nicht so recht und die Rechnernamen, die nicht erreichbar sind, tauchen einfach gar nicht in der Ausgangsdatei auf.

Schöne Grüße
format_c[br][br]Erstellt am: 06.07.10 um 10:54:11
[br]Hier ist eine verbesserte Version, bei der auch die Erkennung des Errorlevels funktioniert:

Code:
@echo off
FOR /F %%A in (input.txt) do (
  ping %%A -n 1 -4 -w 500 > temp.txt
  IF NOT ERRORLEVEL 1 (
    FOR /F tokens=2 delims=[] %%I in (temp.txt) do (
      FOR /F tokens=1,2 %%E in ('arp -a ^| find %%I') do (
        IF %%I == %%E (echo %%A	%%F & echo %%A	%%F >> output.txt)
      )
    )
  ) ELSE (echo %%A ist offline)
)
IF EXIST temp.txt DEL temp.txt

Hier wird eine temporäre Datei z.B. temp.txt benötigt, um die Ergebnisse zwischenzuspeichern.
 
Thema:

Batch-Datei, um MAC-Adressen von (mehreren) anderen Rechnern auszulesen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben