Schulprojekt: Mehrer PC's Hardware Scannen

REC

Bekanntes Mitglied
Hallo

Wir machen in der Schule, im Team, ein Projekt bei dem es darum geht mehrere PC's in einem Klassenzimmer zu scannen. Das heisst alle Hardware Sachen des PC aufzuschreiben und in einer Datenbank zu speichern. Das wären folgende Punkte:

Betriebsystem
Programme
Prozessor
Drucker
Computer
NIC(IPV4 IPV6, MAC Adresses, Bezeichnung, Standart-Gateway, DHCP, Subnet)


Ein paar Sachen konnten wir rausfinden in dem wir in Java den Konsolenbefehl DXDIAG ausführten und so die Daten in eine XML File gespeichert haben.

Aber uns fehlt die gesamte Infos über das Netzwerk. Hat jemand eine Idee? Ich habe folgenden Code im Web gfunden, aber wenn ich den ausführe steht bei meinem PC bei der MAC Adresse überall immer "null"

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();
		}
	}
}
 

c_sidi90

Top Contributor
[Java]Arrays.toString(netint.getHardwareAddress()));[/code] Da liegt dein Fehler.

Ersetz den Inhalt deiner For-Schleife mal mit:

Java:
  byte[] mac = netint.getHardwareAddress();
            if (mac != null) {
            	
            	for (int i = 0; i < mac.length; i++) {
            		System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
                        //Du musst die bytes richtig formatieren, Macadressen werden in Hexa-Dez dargestellt
            	
            	
            	}
            }else{
                        //Mach was
                     }
 

c_sidi90

Top Contributor
Kannst auch unter Windows mit "net view" (cmd) alle sich im Netz befindenden Geräte anzeigen lassen, dir die Namen parse, und den obrigen Schritt für jeden Host durchführen.
 

REC

Bekanntes Mitglied
Das geht komischerweise eben nicht... Das mit dem ipconfig. Habe ich auch schon probiert. Hier ist der Code der das mit dem DXDiag ausliest. Der hat mein Kollege geschrieben.

Java:
public class GenerateDXDiagXML {

	public static void main(String[] args) throws UnknownHostException {

		SimpleDateFormat dateform = new SimpleDateFormat("dd.mm.yy HH:MM:SS");
		Date now = new Date();

		Properties properties = System.getProperties();

		// Service abfragen
		String[] command = { "dxdiag", "/x",
				"C:/Temp/" + InetAddress.getLocalHost().getHostName() + ".xml" };
		System.out.println(InetAddress.getLocalHost().getHostName());
				
		try {
			Runtime runtime = Runtime.getRuntime();
			runtime.exec(command);
		} catch (Exception ex) {
			ex.printStackTrace();
		}

		System.out.println("Sende Befehl an Runtime...");

		System.out.println("\nBefehl ausgeführt, Datei sollte in ca. 15 Sekunden generiert sein.");

		System.out.println("\nComputer: " + InetAddress.getLocalHost().getHostName());
		
		System.out.println("\nIP: " + InetAddress.getLocalHost().getHostAddress());

		System.out.println("\nUser Name: " + properties.get("user.name"));

		System.out.println("\nOS: " + properties.get("os.name"));

		System.out.println("\nDatum & Zeit: " + dateform.format(now));

	}
}





Mhm wenn ich den Inhalt der for Schleife ersetzte bekomme ich:

00-22-FB-D0-C3-6000-22-FB-D0-C3-6100-24-BE-39-78-F300-00-00-00-00-00-00-E000-00-00-00-00-00-00-E0

Meine Mac Adresse ist:

00-24-BE-39-78-F3 und ich sehe das sie irgendwo dazwischen steht :) Aber eben da ich den Code einfach aus dem Web kopiert habe verstehe ich ihn nicht ganz. Ich schauen ihn mir mal genau an, vielleicht kann ich nur die Mac Adresse auslesen


*Edit*
So habe nun im Buch Java ist eine Insel nachgeschlagen.Dort steht dieser Code drin. Nur leider kommt bei mir gar nichts, wenn ich es Debuggen will kommt die fehlermeldung:"ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [../../../src/share/back/util.c:820]
" Langsam habe ich das Gefühl das mit meinem PC etwas nicht stimmt.

Java:
 public static String getMacAddress() 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;
	  }
	  public static void main( String[] args ) throws IOException
	  {
	    System.out.println( getMacAddress() );
	  }
 
Zuletzt bearbeitet:

REC

Bekanntes Mitglied
Mhm ich wollte meinen oberen BEitrag editieren. Aber das ging irgendwie nicht mehr??

Aufjedenfall habe ich einen Code gefunden der funktioniert. Nach dem vielen Lesen verstehe ich nun das meisten welche Klasse und so benutzt werden. Ich fand sogar heraus das JAva einen Scanner besitzte um Dokumente durchzugehen :rtfm:

Hier ist der Code:
Java:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
 
public class app{
 
   public static void main(String[] args){
 
	InetAddress ip;
	try {
 
		ip = InetAddress.getLocalHost();
		System.out.println("Current IP address : " + ip.getHostAddress());
 
		NetworkInterface network = NetworkInterface.getByInetAddress(ip);
 
		byte[] mac = network.getHardwareAddress();
 
		System.out.print("Current MAC address : ");
 
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < mac.length; i++) {
			sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));		
		}
		System.out.println(sb.toString());
 
	} catch (UnknownHostException e) {
 
		e.printStackTrace();
 
	} catch (SocketException e){
 
		e.printStackTrace();
 
	}
 
   }
 
}

Aber kann mir jemand diese Zeile erklären?
Java:
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
 

HimBromBeere

Top Contributor
Code:
"%02X"
Ich nehme mal an, damit tüdelst du dein Byte in eine Hex-Schreibweise um. Die Null steht für "füge führende Null hinzu" falls notwendig (z.B. bei 0F), die zwei steht für "zwei Zeichen" und das X für "Hexadezimal"...
Code:
%s
Und das ist ´n ganz normaler String-Ausdruck... in deinem Fall
Code:
(i < mac.length - 1) ? "-" : "")


War jetzt mehr geraten als gewusst, aber mit ein wenig Denkarbeit kriegt man das ganz gut hin...
 
Zuletzt bearbeitet:

REC

Bekanntes Mitglied
Naja wenn man die Zeichen und Abkürzungen nicht kennt kann man lange darüber studieren:)

Java:
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));

Wo findet die Überrüfung statt ob jetzt bei "F" noch eine 0 vorne hinzugefügt werden muss?
Komisch ist auch das String.format Platz für 2 Argumente hat, hier aber 3 Argumente benutzt werden.
Grundsätzlich geht man die Array (irgendwie automatisch)durch und fügt immer 2 Zahlen zusammen. Für was ist das Fragezeichen?

Wie heissen diese BEfehle gibt es irgendwo eine Liste das man solche Filter selber machen kann.
 

timbeau

Gesperrter Benutzer
Ternärer Operator ist das Stichwort für das Fragezeichen. Es werden nach wie vor 2 Arguemente, durch Komma getrennt, genutzt.
 

REC

Bekanntes Mitglied
Hey habe hier im Forum ein Beispiel gefunden:

die allgemeine Form ist somit:
Code:

x = BOOL_TEST ? TRUE_FALL : FALSE_FALL

d.h. ergibt der BOOL_TEST true so wird x der wert im TRUE_FALL zugewiesen, ansonsten der Wert im FALSE_FALL.

Der ternäre Operator ist reine Geschmackssache, manche nutzen ihn um weniger zu schreiben, manche finden ihn unübersichtlicher (v.a. dann wenn mehrere Abfragen geschachtelt werden)

Dies ist der Bedingungsoperator, der auch Konditionaloperator, ternärer Operator beziehungsweise trinärer Operator genannt wird.


Das heisst also das :
Java:
(i < mac.length - 1)
die Überprüfung ist ob i schon kleiner ist als mac.length. Das ist es ja nur wenn das Array fertig ist. Wenn es am SChluss ist kommt "" zum Einsatz und ansonsten "-". Puh als wenn man das nicht kennt kommt man ja nie drauf???:L

Java:
 ? "-" : "")

Jetzt sehe ich auch das nur 2 Argumente benutzt werden.



Kann ich nun mit diesen Klassen
InetAddress;
NetworkInterface;

nun auch noch IP6, Bezeichnung, StandartGateway DHCP und Subnet auslesen? Dann weiss ich wenigstens das ich mich am richtigen Ort einlese:D

Oder soll ich versuchen den IPCongfig Befehl vom Java abzusetzten und irgendwie das Ergebniss im CMD Fenster auszulesen? Was denkt ihr?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Tiefensuche Graph -> Schulprojekt Java Basics - Anfänger-Themen 1
B Schulprojekt mit Java, was kann man alles programmieren? Java Basics - Anfänger-Themen 5
M Erste Schritte Anfänger braucht Denkanstoß für Schulprojekt Java Basics - Anfänger-Themen 21
I Schulprojekt !sehr wichtig! Java Basics - Anfänger-Themen 6
O Problem bei Schulprojekt Java Basics - Anfänger-Themen 2
L Hilfe für Schulprojekt Java Basics - Anfänger-Themen 10
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
H Mehrer Datentypen aus einer Methode ausgeben. Java Basics - Anfänger-Themen 25
K mehrer applets sollen sich gegenseitig verständigen können Java Basics - Anfänger-Themen 3
P Mehrer Objekte erstellen || Wizard || Java Basics - Anfänger-Themen 24
B mehrer comboboxes mit dem selben inhalt befüllen Java Basics - Anfänger-Themen 8
G Parameterübergabe über mehrer Klassen Java Basics - Anfänger-Themen 2
F mehrer Textdateien Inhalte in eine TXT Datei Java Basics - Anfänger-Themen 16
M mehrer run methoden in einem Thread Java Basics - Anfänger-Themen 7
Z Vector führt mehrer, aber gleiche Elemente Java Basics - Anfänger-Themen 6
T Hardware-UUID Java Basics - Anfänger-Themen 3
E Ansprechen von Hardware mit Java Java Basics - Anfänger-Themen 7
N software die sich als hardware ausgibt? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben