NetworkInterface ausgeben

GS_Unnamed

Mitglied
Hallo zusammen

Ich kann mir an dem doch noch ziemlich lange den Kopf zerbrechen, aber ich komme einfach nicht drauf was ich übersehen habe. Es muss eigentlich etwas sehr Triviales sein :autsch:

Das hier ist der relevante Teil bei der einen Klasse:
Java:
public class Crypt {
	public static void main(String[] args) throws SocketException {
		String m1 = MacAddress.Mac();
		System.out.println(m1);
	}

Das hier ist die vollständige Klasse, bei der ich die Mac-Adresse auslesen will.
Java:
public class MacAddress {

	public static String Mac() throws SocketException {
		
		String result = "";
		
		for (NetworkInterface ni : Collections.list( NetworkInterface.getNetworkInterfaces() ) )  {
			byte[] hardwareAddress = ni.getHardwareAddress();

			if ( hardwareAddress != null ) {
				for ( int i = 0; i < hardwareAddress.length; i++ )
					result += String.format( (i==0?"":"-")+"%02X", hardwareAddress[i] );

				return result;
	    	}
		}

		return result;
	}		
}


Das Ziel ist jetzt die Adresse auf der Konsole auszugeben in der 1. Klasse, aber wenn ich das wie oben versuche, kommt gar nichts...

Schonmal vielen Dank für Eure Bemühungen
 
Zuletzt bearbeitet von einem Moderator:
wenn du 'Methode in einer anderen Klasse' üben willst, wie dein vormaliger Thementitel war,
dann schreibe die Methode mit nur einer Zeile:
return "test";
diese Ausgabe ist dann auch zu sehen, stimmst?

der Aufruf über Klassen hinweg geht also, zur Methode ist nichts mehr zu sagen, außer dass sie besser klein geschrieben wird,

interessant ist nun nur, was der große NetworkInterface-Block an Daten schafft,
untersuche nach und nach was NetworkInterface.getNetworkInterfaces() zurückliefert, ob null oder ein Array welcher Länge usw.
 
Also wenn die Methode für das NetzwerkInterface wirklich einen String liefert, sollte der ausgegeben werden? (Korrekter Methoden Aufruf?)

Ja. Ich denke, dass der getHardwareAddress()-Aufruf einfach null zurück liefert (laut Doku ist das möglich). In diesem Fall wird einfach der Leerstring ausgegeben. Initialisiere in Zeile 5 den result-String mit einem sichtbaren Text.
 
Ok, ja stimmt, wenn man dort etwas reinschreibt funktioniert es...:autsch:

Aber soweit ich weiss, gibt getHardwareAddress() nur null zurück, wenn im ganzen NetzwerkInterface-Aufruf durchweg keine Hardware Adresse zu finden ist...

Wie komme ich sonst zu der MAC-Adresse?
 
Mmmh.

Java:
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;

public class MacAddress {

    public static void main(String args[]) throws SocketException {
        Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
        for (NetworkInterface netint : Collections.list(nets)) {
            System.out.println("Name:        " + netint.getDisplayName());
            System.out.println("Mac-Adresse: " + Arrays.toString(netint.getHardwareAddress()));
            System.out.println();
        }
    }
}

Zeigt bei mir einen Haufen an. Wie sieht das bei dir aus?
 
Ja Das gibt einen Haufen und auch nicht immer null...

Jetzt... Wieso funktioniert es mit der vorherigen Methode nicht?
Und welcher dieser Ausgaben ist die Mac-Adresse des Pcs (Netzwerkkarte)?
 
Ja Das gibt einen Haufen und auch nicht immer null...

Jetzt... Wieso funktioniert es mit der vorherigen Methode nicht?
Und welcher dieser Ausgaben ist die Mac-Adresse des Pcs (Netzwerkkarte)?

Weil du mit "return" gleich die erste "MAC" zurück gibst die das erste NIC hat. Da in der Regel "loopback" das erste Interface ist und dies natürlich keine MAC hat (bzw eine MAC mit der Länge von 0 und dem Inhalt von "") kommt natürlich entweder NULL oder "" als Ergebnis.

Wir hatten das Thema schon mal vor einiger Zeit.

Lösung : entweder mit ner List ALLE MACs returnen oder halt so lange immer wieder auf NULL und "" prüfen und dann erst die returnen die eben !=NULL und !equals("") ist.
 

Zurück
Oben