auf Networkinterface per MAC-Adresse zugreifen

Memphis01

Grünschnabel
Hi liebe Community,

ich bin gerade an einem Projekt daran bei dem ich auf folgendes Problem gestoßen bin.

Ich benötige für mein Projekt Kommunikation die über Sockets und IPs funktioniert. Doch nun benötigte ich eine VM-Ware und habe mich für VirtualBox entschieden.
Seit der Installation funktioniert leider gar nix mehr so wie es sollte.

Da ich mit VirtualBox nun auch 2 virtuelle Netzwerkkarten habe, ist das Problem das mein Rechner die falsche Netzwerkkarte in meinem Projekt erkennt, somit eine Falsche IP bezieht und versendet und das legt wiederum die gesamte Kommunikation zwischen den Rechnern lahm, da kein Rechner auf die IP antwortet auf die er sollte.


IPConfig – all
Code:
Windows-IP-Konfiguration
  
 Hostname  . . . . . . . . . . . . : NBWINDOWS7PRO
   Primäres DNS-Suffix . . . . . . . :
   Knotentyp . . . . . . . . . . . . : Hybrid
   IP-Routing aktiviert  . . . . . . : Nein
   WINS-Proxy aktiviert  . . . . . . : Nein

Drahtlos-LAN-Adapter WLAN:
   Verbindungsspezifisches DNS-Suffix:
   Beschreibung. . . . . . . . . . . : Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC
   Physikalische Adresse . . . . . . : 1C-4B-D6-4C-36-B9
   DHCP aktiviert. . . . . . . . . . : Ja
   Autokonfiguration aktiviert . . . : Ja
   IPv4-Adresse  . . . . . . . . . . : 192.168.100.11(Bevorzugt)

Ethernet-Adapter LAN:
   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix:
   Beschreibung. . . . . . . . . . . : Marvell Yukon 88E8057 PCI-E Gigabit Ethernet Controller
   Physikalische Adresse . . . . . . : 00-1F-16-31-54-09
   DHCP aktiviert. . . . . . . . . . : Ja
   Autokonfiguration aktiviert . . . : Ja

Ethernet-Adapter VirtualBox Host-Only Network:
   Verbindungsspezifisches DNS-Suffix:
   Beschreibung. . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
   Physikalische Adresse . . . . . . : 08-00-27-00-28-7B
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja
   IPv4-Adresse  . . . . . . . . . . : 192.168.56.1(Bevorzugt)

Verbunden bin ich über die WLAN-Karte, ab und an auch per LAN, doch leider bekomm ich in Java nur die IP der Virtuellen Netzwerkkarte angezeigt

InetAddress.getLocalHost()

Code:
NBWINDOWS7PRO/192.168.56.1

Eine Auflistung der Netzwerkkarten in Java sieht wie folgt aus
Code:
Name:		eth3
Display:	Marvell Yukon 88E8057 PCI-E Gigabit Ethernet Controller
Loopback:	false
Up:		true
Virtual:	false
MAC:		08002700287B

Name:		net4
Display:	Realtek RTL8191SE Wireless LAN 802.11n PCI-E NIC
Loopback:	false
Up:		true
Virtual:	false
MAC:		08002700287B

Name:		eth7
Display:VirtualBox Host-Only Ethernet Adapter
Loopback:	false
Up:		true
Virtual:	false
MAC:		08002700287B

Hierbei sollte auffallen, das jede Netzwerkkarte die selbe MAC-Adresse hat und dies auch die MAC-Adresse der VirtualBox Netzwerkkarte ist. Warum das so ist kann ich mir nicht erklären.

Gibt es eine Möglichkeit eine bestimmte Netzwerkkarte auszuwählen, außer über die Namen („eth0“, „eth1“, …). Am liebsten wäre mir die Eingabe einer MAC-Adresse da ich so genau bestimmen könnte welche Netzwerkkarte ich verwenden will.
Selbst ds umstellen der Prioritäten in Windows hat nichts gebracht, ich kann lediglich die Virtuelle Netzwerkkarte ausschalten dann funktioniert es. Da ich aber die Virtuelle-Netzwerkkarte brauche, kommt dies nicht in Frage.

Ich muss doch irgendwie beeinflussen können, auf welche Netzwerkkarte Java zugreift, dies sollte idealerweise per MAC-Adresse passieren, da eth1 in Windows nur schlecht nachvollziehbar ist.
So dass ich durch den Aufruf von InetAddress.getLocalHost() auch die entsprechende und damit richtige IP verwende.

Ich benötige hierbei dringend Hilfe, da ich an meinem Projekt nicht weitermachen kann ohne über diesen Schatten gesprungen zu sein. Da die Kommunikation zwischen Rechnern eine Grundlegende Sache in meinem Projekt ist.

Mit bestem Dank

Memphis01
 
Hallo,

hast du dir die Eigenschaft HardwareAddress schonmal angeschaut? Laut api ist das die MAC Adresse.

Code:
		try {
			Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
			while (networkInterfaces.hasMoreElements()) {
				NetworkInterface networkInterface = (NetworkInterface) networkInterfaces.nextElement();
				byte[] hardwareAddress = networkInterface.getHardwareAddress();
				if (null != hardwareAddress) {
					for (int i = 0; i < hardwareAddress.length; i++) {						
						System.out.print(Integer.toHexString(hardwareAddress[i]));
					}
					System.out.println("\n");
				}
			}
		} catch (SocketException e) {
			e.printStackTrace();
		}

Ausgabe:
Code:
01dffffff9266ffffff830

2054554e1

0000000ffffffe0

Bis auf die vielen f stimmt das mit meinen mac Adressen überein. Evtl stimmt was mit dem toHexString nicht.

Zum bestimmen welches Interface verwendet werden soll kann man bei der Verwendung von Sockets mit angeben:

Code:
Socket soc = new java.net.Socket();
soc.bind(networkInterface.nextElement());

Dann könnte man über die Interfaces iterieren, das richtige raussuchen anhand der mac und danach den Socket binden.
 
Zuletzt bearbeitet:
Hi,

ja ich hatte mir die APi schon angeschaut und an dem problemm sitzt ich nun knapp 1 Woche und es tut mir leid,

aber selbst wenn ich den von dir hier gepostete Code einsetze

bekomm ich als ausgabe nur

Code:
80270287b

80270287b

80270287b

80270287b

Das heisst alle NICs haben schon wieder die selbe MAC und wieder die MAC der VirtualBox NIC

Woran kann das liegen, irgendwas läuft doch da grundlegend schief.

Ich hab deinen Code 1:1 in ne Testdatei gepastet und o.g. als Ergebnis bekommen.
 
Zuletzt bearbeitet:
Kann mir jemand weiterhelfen ...

Ich bekomm egal was ich auch mache immer die MAC Adresse der Virtuellen Netzwerkkarte (in VirtualBox bridged) auf alle anderen Angezeigt, dementsprechend kann ich keinen Zugriff auf das richtige Netzwerk-Interface machen und komm nicht ausserhalb meines Rechners.

Kann mir bitte jemand weiterhelfen
 

Neue Beiträge

Zurück