ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
709
709
EMPFEHLEN
-
Heyho,
ich möchte gerne von mehreren Rechner per Java die Mac-Adresse von der LAN + WLAN auslesen. Allerdings habe ich beim meinem kleinen Code das Problem, dass nur die aktiven Interfaces angezeigt werden und leider nicht diese, die keine Verbindung haben (also wenn ich nur per WLAN verbunden bin, wird die LAN-Verbindung nicht angezeigt) oder deaktiviert sind.
Gibt es da eine Möglichkeit diese auch anzeigen zu lassen?
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; import java.util.Collections; public class Mac { /** * @param args */ public static void main(String[] args) { try { String[] ausgabe = getMacAddress(); for(int i = 0; i < ausgabe.length; i++){ if(ausgabe[i] != null) System.out.println(ausgabe[i]); } } catch (SocketException e) { e.printStackTrace(); } } public static String[] getMacAddress() throws SocketException { String[] result = new String[10]; ArrayList<NetworkInterface> test = Collections.list( NetworkInterface.getNetworkInterfaces()); int anzahl = 0; for ( NetworkInterface ni : test ) { byte[] hardwareAddress = ni.getHardwareAddress(); String zwischen = ""; if ( hardwareAddress != null ) { for ( int i = 0; i < hardwareAddress.length; i++ ) zwischen += String.format( (i==0?"":"-")+"%02X", hardwareAddress[i] ); } result[anzahl] = zwischen; anzahl++; } return result; } }
Der Code ist nicht schön formatiert bzw. schöne Variablennamen, war erstmal nur nen Test!
Eigentlich funktioniert es auch, aber es besteht halt das oben genannte Problem...
Vielen Dank schon einmal im voraus!
mfgGeändert von rockente (09.02.11 um 11:16 Uhr)
-
09.02.11 09:15 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Vielleicht gibt die Methode NetworkInterface.getNetworkInterfaces() nur aktive NetworkInterfaces zurück?
Bei mir macht dein Code das selbe, er gibt die MAC-Adressen von einer real existierenden und einer virtuellen Verbindung aus, die beide aktiv sind, die 2. virtuelle Verbindung von virtualBox wird aber ignoriert.
Wenn du wirklich alle (auch deaktivierte) haben möchtest, musst du vermutlich auf native Methoden zurückgreifen…Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Schade =D wäre das einfachste gewesen...
Kann man nicht eventuell den Process "ipconfig /all" aufrufen und die Ausgabe in Java weiterverarbeiten? Damit würde ich ja eigentlich alle Informationen bekommen.
Bzw. ich könnte ja mitarbeitenCode java:1
getInputStream()
Also ungefähr so:
Allerdings wie kann ich den Stream sinnvoll weiterverarbeiten oder erstmal ausgeben, dann solle ich auch wissen, wie ich den weiterverarbeiten kann!Code java:1 2 3 4 5 6 7 8 9
Runtime pr = Runtime.getRuntime(); try { pr.exec("ipconfig /all"); System.out.println((pr.exec("ipconfig /all").getInputStream())); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Geändert von rockente (09.02.11 um 12:04 Uhr)
-
09.02.11 12:04 #4
- Registriert seit
- Jun 2009
- Beiträge
- 870
geht halt nur unter Windows. unter den meisten UNIX-basierten Betriebssystemen (Linux, Mac OS X?, BSD, …) nennt sich das dann ifconfig https://secure.wikimedia.org/wikipedia/en/wiki/Ifconfig
Aber da musst du aufpassen, manche Begriffe werden übersetzt…Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Die Windowsvariante reicht mir!
Mein Problem ist jetzt nur, wie ich den InputStream weiterverarbeitet bekomme!
Okay so gehts zumindest für die deutsche Windows version... nur die Frage ob auch mit Win7 und Vista...
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
try { Process pr = Runtime.getRuntime().exec("ipconfig /all"); BufferedReader in = new BufferedReader( new InputStreamReader(pr.getInputStream()) ); for ( String s; (s = in.readLine()) != null; ){ if(s.startsWith(" Hostname")) System.out.println( s ); if(s.startsWith(" Beschreibung")) System.out.println( s ); if(s.startsWith(" Physikalische")) System.out.println( s ); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Geändert von rockente (09.02.11 um 12:34 Uhr)
-
09.02.11 14:46 #6SE Tutorials.de Gastzugang
also entweder verwendest du ne zu alte VM oder hast keine rechte
unter Win Vista Home Premium 32-Bit GER mit Java 7 bekommt man alles was man will
source
netinf.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import java.io.*; import java.net.*; import java.util.*; public class netinf { public static void main(String[] args) throws Exception { new netinf(); } public netinf() throws Exception { Enumeration<NetworkInterface> num=NetworkInterface.getNetworkInterfaces(); while(num.hasMoreElements()) { NetworkInterface inf=num.nextElement(); System.out.println(inf.toString()); try { System.out.println("MAC "+tools.hex(inf.getHardwareAddress())); } catch(Exception e) { System.out.println("MAC FAILED"); } } } }
tools.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
public class tools { public static String hex(byte[] input) throws Exception { StringBuffer sb=new StringBuffer(input.length*2); for(int i=0; i<input.length; i++) { int v=input[i]&0xFF; if(v<16) sb.append("0"); sb.append(Integer.toHexString(v)); } return sb.toString().toUpperCase(); } public static byte[] dehex(String input) throws Exception { byte[] ret=new byte[input.length()/2]; for(int i=0; i<ret.length; i++) { int index=i*2; int v=Integer.parseInt(input.substring(index, index+2), 16); ret[i]=(byte)v; } return ret; } }
und bei mir sieht das ganze so aus
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
PROMPT>java netinf name:lo (Software Loopback Interface 1) index: 1 addresses: /127.0.0.1; /0:0:0:0:0:0:0:1; MAC name:net0 (WAN-Miniport (L2TP)) index: 2 addresses: MAC FAILED name:net1 (WAN-Miniport (PPTP)) index: 3 addresses: MAC FAILED name:ppp0 (WAN-Miniport (PPPOE)) index: 4 addresses: MAC FAILED name:eth0 (WAN-Miniport (IPv6)) index: 5 addresses: MAC FAILED name:eth1 (WAN-Miniport (IP)) index: 6 addresses: MAC FAILED name:ppp1 (Asynchroner RAS-Adapter) index: 7 addresses: MAC FAILED name:eth2 (NVIDIA nForce Networking Controller) index: 8 addresses: /fe80:0:0:0:491a:65ca:11d4:f6df%8; MAC 001B24782958 name:net2 (Broadcom 802.11g-Netzwerkadapter) index: 9 addresses: /10.60.0.175; /fe80:0:0:0:e95c:2838:9754:d0d%9; MAC 001A739449BE name:net3 (Teredo Tunneling Pseudo-Interface) index: 10 addresses: /fe80:0:0:0:0:100:7f:fffe%10; MAC 020054554E01 name:net4 (WAN Miniport (SSTP)) index: 11 addresses: MAC FAILED name:eth3 (WAN-Miniport (Netzwerkmonitor)) index: 12 addresses: MAC FAILED name:net5 (isatap.{B6B3632E-78DD-4377-96AF-8E2CF0B1F92B}) index: 13 addresses: MAC 00000000000000E0 name:eth4 (Hamachi Network Interface) index: 14 addresses: /5.175.183.76; /fe80:0:0:0:516f:483c:6a57:c822%14; MAC 7A79F541FF0B name:net6 (Microsoft-6zu4-Adapter) index: 15 addresses: /2002:5af:b74c:0:0:0:5af:b74c; /2002:5af:b74c:0:0:0:0:0; MAC 00000000000000E0 name:net7 (isatap.imed.uni-magdeburg.de) index: 16 addresses: /fe80:0:0:0:0:5efe:a3c:af%16; MAC 00000000000000E0 name:net8 (isatap.{1A0E68AF-00E1-47EF-BCFE-99453CB15CD7}) index: 17 addresses: /fe80:0:0:0:200:5efe:5af:b74c%17; MAC 00000000000000E0 name:eth5 (WAN-Miniport (IPv6)-Zone Alarm Firewall Driver-0000) index: 20 addres ses: MAC FAILED name:eth6 (WAN-Miniport (IP)-Zone Alarm Firewall Driver-0000) index: 21 addresse s: MAC FAILED name:eth7 (WAN-Miniport (Netzwerkmonitor)-Zone Alarm Firewall Driver-0000) index : 22 addresses: MAC FAILED name:eth8 (WAN-Miniport (IPv6)-QoS Packet Scheduler-0000) index: 23 addresses: MAC FAILED name:eth9 (WAN-Miniport (IP)-QoS Packet Scheduler-0000) index: 24 addresses: MAC FAILED name:eth10 (WAN-Miniport (Netzwerkmonitor)-QoS Packet Scheduler-0000) index: 25 addresses: MAC FAILED name:net9 (Broadcom 802.11g-Netzwerkadapter-QoS Packet Scheduler-0000) index: 26 addresses: MAC FAILED name:net10 (Broadcom 802.11g-Netzwerkadapter-Native WiFi Filter Driver-0000) ind ex: 27 addresses: MAC FAILED name:net11 (Broadcom 802.11g-Netzwerkadapter-Zone Alarm Firewall Driver-0000) in dex: 28 addresses: MAC FAILED PROPMT>
das MAC FAILED bedeutet das zum Interface keine MAC vorhanden ist
wie du richtig liest ist mein LAN-Interface *NVIDIA nForce Net Controller* nicht verbunden da keine IPv4 adresse angegeben ist sondern lediglich die IPv6 die WIN vergeben hat ...
bei den beiden Interfaces W-LAN *Broadcom 802.11g* und Hamachi steht jeweils auch eine IPv4 adresse ... was beduetet das diese verbunden sind *bei hamachi erledigt das eh die software*
folglich ist an deinem code oder an deinen berechtigungen im system oder sogar am system selbst irgendwas nich in ordnung ...
habe dasselbe auch schon mal unter meinem Win XP Pro 32-Bit gemacht *dort allerdings als Administrator und nicht wie auf dem Vista-System als "normaler" User* und auch dort hab ich alle MAC-adressen bekommen .. auch von den nicht-verbundenen
nutze auf beiden rechnern Java 7 b120 ...
-
Ah vielen Dank, das sieht schon mal nach einem sehr guten Ansatz aus!
Auch wenn es an der VM zu scheinen liegt! Bis jetzt ist doch Java 7 nur nen Prerelease oder?
Also zumindest habe ich es nicht anders gefunden und als offizielles update auf java 6 ist ja noch nicht draußen. Oder habe ich iwas nicht mit bekommen!
Schonmal vielen Dank für den Ansatz!
-
10.02.11 11:53 #8SE Tutorials.de Gastzugang
ja ... das ist richtig ...
JavaSE is immo in version 6 update 23 verfügbar
JavaSE 7 gibbet nur als Early-Access build 120
was jetzt genau das problem bei dir ist ist aber immer noch fraglich ...
probier halt einfach mal mein code-snippet aus ob damit immernoch das problem besteht *keine panik .. ich bin für OpenSource ... jeder darf meine codes verwenden*
wie gesagt ... wäre halt mal interessant was für ein system du genau nutz und wie es mit deinen rechten aussieht ...
es kann nämlich sein das java halt keinen zugriff auf solche informationen bei dir hat ... sei es durch irgendne sichheitsrichtlinie *wobei mir da jetzt erlich gesagt keine einfallen würde* oder einfach nur weil dein code anderst arbeitet
ich habe jetzt deinen code mal ausprobiert und er arbeitet wie er soll ... er gibt mir zu ALLEN interfaces die ich hab *verbunden , getrennt , deaktiviert , virtuell* dir MACs ...
das deine beschränkung auf 10 beim ersten testlauf ne exception verursacht hat war mir eigentlich vorher klar ...
weil dein code macht genau das was ich auch gelesen habe ... nämlich das er auch die leeren MACs mit in das array schreibt ... was erstmal zu nem haufen leerer Strings führt ... > speicherverschwendung ...
habe zum test die grenze auf 64 angezogen *naja mit 1 GB RAM auf nem notebook mit vista muss man echt aufpassen wie viel man davon java gibt
* ... und dann gings auch ... aber das is echt nich die lösung ...
besser ist es dann schon so vorzugehen wie nach meinem code : beim durch-iteriren der interfaces gleich in der for *oder wie du es sehr elegant mit nem foreach - konstrukt gemacht hast* oder while auf die einzelnen MACs zu prüfen und bei einem leeren string *oder halt wenns NULL is* einfach mit continue dierekt beim nächsten weiter machen
aber das erklärt immer noch nicht die sache das du nur informationen von verbundenen interfaces bekommst ... ich bekomm ja sogar zum nicht mal vorhandenen loopback infos *auch wenns nur die ip 127.0.0.1 is und keine mac .. aber immer hin*
also wie oben erwähnt ... schreib einfach mal was du für n system hast ... oder teste deinen code mal auf nem anderen rechner um sicherzustellen das es eben nicht an deinem code liegt ...
naja ... is echt nich leicht das problem ... aber ich bleib da auf jedenfall mal dran und versuch mal was zu simulieren ... aber ich glaube nicht das ich einen ähnlichen fehler reproduzieren kann ...
-
Vielen Dank schonmal für deine Bemühungen!
Also ich nutze atm Windows XP Pro und bin als "Admin" drin
Dazu kommt dann halt Java 6 Update 23... ich denke das darin das Problem liegt, dass bei Java 7 noch was optimiert wurde.
Mein Code vom Anfang war auch nur grob hinunter geschrieben ohne Kontrolle auf irgendwas
Habe deine mal ausprobiert und da ist im endeffekt das gleiche Ergebnis, wie bei meinem Code... Es werden halt nur die aktiven ausgelesen.
Bei der Lösung, dass ipconfig aufgerufen wird und die Ausgabe weiter verarbeitet wird, hat natürlich besser geklappt und es gibt mir auch die MAC-Adressen von nicht verbunden aus (wenn auch nicht von den deaktivierten).
Deine Lösung habe ich gerade nochmal mit nicht verbundener Lan ausprobiert:
Da zeigt er mir zwar die Lan-Verbindung an, kann aber keine MAC dazu auslesen. WEnn die Verbindung allerdings besteht, zeigt er mir die Mac-Adresse an. Sehr komisch irgendwie...
-
10.02.11 13:30 #10SE Tutorials.de Gastzugang
also ich habe mir jetzt *leider umständlich* ebenfalls v6 u23 installiert ... die class neu compiled und mit v6 u23 ausgeführt ... und ich erhalte immer noch alle MACs des systems ...
bin grad dabei mir XP Pro SP2 auf ne VirtualBox zu ziehen ... *keine panic an alle .. is original mit originalem key* ... werd mein ergebnis mit v6u23 und v7b120 dann posten
update 1
v6u23 : zeigt nur aktivierte und verbundene MACs ... bei nicht-verbunden oder deaktiviert wird keine MAC zurückgegeben
update 2
v7b120 : nur aktivierte aber auch nicht-verbundene unter XP
unter vista *ich habs doch noch mal ausprobiert* nur aktivierte aber auch nicht-verbundene ...
*hab zum test mal mein hamachi-interface deaktiviert ... dann wars auch plötzlich in der liste weg*
folglich scheint es unter XP schon daran liegen das aktivierte aber nicht-verbundene nur bei v6 nicht angezeigt werden ... unter v7 werden dann auch nicht-verbundene angezeigt ... so lange sie halt aktiviert sind ...
unter vista geht das schon mit v6 ... aber hier auch wieder nur die aktivierten interfaces ...
auch IPCONFIG /ALL gibt nur die aktivierten interfaces aus ... die deaktivierten interfaces werden unter keinen umständen angezeigt ... ob es an den treibern liegt oder an windows selbst weis ich nicht ...
ich habe grade kein unix als image ... müsste mir erst umständlich übers netz installieren ... werd ich heute abend mal in angriff nehmen ...
kuggn wie es dann unter unix aussieht ...Geändert von SE (10.02.11 um 15:51 Uhr)
Ähnliche Themen
-
Daten werden komisch ausgegeben
Von veil123 im Forum PHPAntworten: 12Letzter Beitrag: 26.02.10, 23:18 -
[VC++ 6.0] Bei Eingabe von 'a' soll 'b' ausgegeben werden!
Von berwing im Forum C/C++Antworten: 3Letzter Beitrag: 14.12.07, 20:04 -
mit AND werden keine Daten ausgegeben
Von vedam im Forum PHPAntworten: 3Letzter Beitrag: 24.05.07, 13:20 -
Es werden leider immer neue Sessions erzeugt.
Von joky_joky im Forum PHPAntworten: 2Letzter Beitrag: 01.12.06, 17:00 -
Variablen werden nicht ausgegeben
Von chpa im Forum PHPAntworten: 3Letzter Beitrag: 22.08.04, 21:01





Zitieren
Login





