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

Dieses Thema Batch-Datei, um MAC-Adressen von (mehreren) anderen Rechnern auszulesen im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von format_c, 2. Juli 2010.

Thema: Batch-Datei, um MAC-Adressen von (mehreren) anderen Rechnern auszulesen Hallo an alle! Einen ählichen Thread gab es schon vor ein paar Jahren...

  1. Hallo an alle!
    Einen ählichen Thread gab es schon vor ein paar Jahren (http://www.wintotal-forum.de/index.php/topic,124747.0.html), 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.
     
  2. Danke

    GetMac
    http://www.wintotal.de/softwarearchiv/?id=2574

    pan_fee
     
  3. Das Tool ist _NICHT_ von MS....
     
  4. na dann poste mal die URL

    pan_fee ::)
     
  5. 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
     
  6. @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...
     
  7. 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.
     
  8. @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[hr][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.
     
Die Seite wird geladen...

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

Forum Datum
Probleme beim Ausführen einer Batch-Datei Windows XP Forum 5. Mai 2013
Verzeichnisrechte per Batch-Datei Windows XP Forum 18. März 2013
cmd-Ausgabe bei Batch-Dateien trotz Dateiumleitung Webentwicklung, Hosting & Programmierung 27. Okt. 2010
Batch-Datei ähnlich apples time machine ? Windows XP Forum 28. Juni 2009
USB-Stick per Batch-Datei deaktivieren Webentwicklung, Hosting & Programmierung 21. Juni 2009