Die (Windows)MAC-Adresse vor 1.6

Pantoi

Aktives Mitglied
Hi, ich bin gerade vor der Aufgabe die MAC-Adressen eines Systems auszulesen.
Problem bei der Sache: Es darf maximal Java 1.5 verwendet werden (besser wär sogar noch 1.4),
es soll auf allen Windows Versionen funktionieren und unabhängig von der Systemsprache sein.

Aufgrund von Java 1.5 fällt ja leider das NetworkInterface.getHardwareAddress() raus...
ipconfig /all exportieren und parsen würde vorraussetzen, dass man für jede Sprache die
jeweiligen Keywords ("Physikalische Adresse" im Deutschen z.B.) reincodet.

Jetzt suche ich also nach eine anderen Möglichkeit die MAC-Adresse auszulesen,
geht das mit JNI oder irgendwelchen anderen Libs? Die Lib sollte in dem Fall mindestens LGPL
oder kaufbar sein, da es hier um ein closedSource Projekt geht.
 
Zuletzt bearbeitet:
Am einfachsten wär wohl, wenn du die MAC-Adresse trotzdem per [c]ipconfig /all[/c] ausliest und per Regex rausziehst. Meines Erachtens sollte folgender Regex helfen: [c]\s+([0-9A-F]{2}\-){5}[0-9A-F]{2}\s+[/c]
 
Okay, das würde mir die Adresse ausgeben.
Jetzt gibts doch aber wenn du ipconfig /all durchführst in der Ausgabe mehr als eine MAC-Adresse... wie ordne ich die dann zu?

Soll heissen, ich möchte jetzt die MAC-Adresse vom WLAN Adapter und nicht die vom LAN oder
was sich da sonst noch so findet, dann brauch ich ja z.B. noch was unter dem Eintrag Beschreibung
steht.
Der wiederum ist wohl nicht so schön auszulesen wie ne MAC-Adresse und das wäre dann wieder Sprachenabhängig.
 
Nunja, du musst davon ausgehen, dass wenn du die Daten in Java vorliegen hättest, ebenfalls eine Liste von möglichen MAC-Adresse hättest. Diese Problematik kannst du nicht so einfach umgehen. Du kannst dir natürlich zuerst mal alle MAC's raussuchen, und dann (womöglich wieder mit Regex) prüfen, welche dir am ehesten passt. Z.B. so:
Code:
hole alle MACs
wenn MACs vorhanden
    finde MACs bei welchen "in der Umgebung" das Wort "WLAN" vorkommt
    wenn keine MACs gefunden
        finde MACs [was auch immer] ...
        wenn wieder keine
             nimm die erste oder letzte vorhandene MAC
...
 
Okay der Denkansatz ist schonmal nicht verkehrt - ich wäre übrigens sehr dankbar wenn mir jemand eine ipconfig von Win7 posten könnte - ich hab nämlich den verdacht einer Lösung 😀

Die Ausgabe der ipconfig scheint immer folgendes Schema zu haben

Beschreibung . . . . . . . : LAN-Adapter
Physikalische Adresse. . : MAC-Adresse

Wenn ich also davon ausgehen kann, dass immer die MAC Adresse auf die Beschreibung folgt,
kann ich mir die vorige Zeile merken und wenn eine MAC gefunden den String trennen mit
String.split(" : ") und mir dann das 2. Element als Name holen...
 
Hier ein lauffähiges Beispiel:
Java:
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Foo {

    public static void main(String[] args) {
        String input = "someCrap\n      Description . . . . . . . . . . . : some Controller\n\r";
        input += "Physical Address. . . . . . . . . : 00-8B-16-70-FF-DD  \rmaybe\tother stuff";
        getMacAdresses(input);
    }

    public static Map<String, String> getMacAdresses(String input) {
        Map<String, String> map = new HashMap<String, String>();
        Pattern pattern = Pattern
                .compile(":\\s+(.*?)\\s*[\\n\\r]+.*?:\\s+(([0-9A-F]{2}\\-){5}[0-9A-F]{2})\\s*[\\n\\r]");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            map.put(matcher.group(2), matcher.group(1));
            // zum Testen:
            System.out.println("added: " + matcher.group(2) + " (" + matcher.group(1) + ")");
        }
        return map;
    }
}
Du kannst dann vom Process einfach den Output lesen und jeweils eine neue Zeile und \n zu einer lokalen Variable hinzufügen. Ohne einen \n oder \r am dazwischen und am Schluss gehts nicht (falls in der letzten Zeile noch eine MAC ist, würde die nicht gefunden werden).
 

Zurück
Oben