binden auf eine bstimmte IP und Netzwerkinterface

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi all,

Ich habe auf meinem rechner 2 Unterschiedliche Netzwerkkarten mit verschiedenen Subnets (bzw. bekommen ihre IP über DHCP).

eth0 192.168.112.1 192.168.112.1
eth1 192.168.123.100 192.168.123.100

Ich möchte das mein Java Programm eine bestimmte IP verwendet um einen Socket zu binden.

Das Problem habe ich auch wenn ich RTP verwende

String url = "rtp://192.168.123.100:49600/audio/16";

Obwohl ich die 192.168.123.100 IP angebe bindet java den Port 49600 auf 192.168.112.1 ?

kennt sich da wer aus wie ich das steuern kann?

thx
jotun
 
T

tuxedo

Gast
Lass doch mal n bisschen Sourcecode vom SocketServer sehen... Dann sehen wir was du "falsch" machst.

Im fall von Java NIO funktioniert das so:

Code:
		// Bind the server socket to the specified address and port
		InetSocketAddress isa = new InetSocketAddress(address, listenPort);
		serverChannel.socket().bind(isa);

Im Falle von Java IO (ist etwas gebräuchlicher), bietet die API ja folgenden Konstruktor für ServerSocket an:

Code:
public ServerSocket(int port,
                    int backlog,
                    InetAddress bindAddr)
             throws IOException

Oder meinst du das Problem, dass beim Öffnen einer ausgehenden Verbindung Java über das falsche Netzwerkinterface geht?!



- Alex
 
G

Guest

Gast
ja genau den dritten punkt den du angeführt hast meine ich

Code:
String localHost = null;
		try {
			localHost = InetAddress.getLocalHost().getHostName();
		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} try {
			for ( InetAddress ia : InetAddress.getAllByName(localHost) ) System.out.println( ia );
		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		String url = "rtp://192.168.123.100:49600/audio/16";

		MediaLocator mrl = new MediaLocator(url);

hamer/192.168.112.1
hamer/192.168.123.100
Open log file: C:\WINDOWS\TEMP\jmf.log
Player created.

das mit der local IP hab ich nur testweise reingegeben um zu sehen welche IPs es gibt und anscheinend nimmt er die erste die er findet trauriger weise :p

er nimmt das falsche netzwerkinterface .. er nimmt nämlich 192.168.112.1 mit port 49600 anstatt wie ich im url definiere 192.168.123.100:49600
 

HoaX

Top Contributor
das hat nichts direkt mit java zutun sonderm mit dem routing der datenpakete. da du ja nach localhost verbindest geht der verkehr eh übers loopback und nicht wirklich über das zur ip gehörende device.
 
G

Guest

Gast
hallo again,

Ich habe das Problem mittlerweile genau lokalisiert:

Ich mache natürlich einen Server Socket auf IP:port

Dies übergeben ich mit String URL dem javax.media.MediaLocator

Der allerdings verwendet das Netzwerkinterface mit der höchsten Hex nummer im windows cmd

Auszug aus cmd.exe route print:
C:\Dokumente und Einstellungen\Administrator>route print
===========================================================================
Schnittstellenliste
0x1 ........................... MS TCP Loopback interface
0x50003 ...00 00 56 c0 22 01 ...... VMware Virtual Ethernet Adapter for VMnet1
0x50005 ...00 00 56 c0 22 08 ...... VMware Virtual Ethernet Adapter for VMnet8
0x70002 ...00 8f 81 1c 00 1a ...... Attansic L1 Gigabit Ethernet 10/100/1000Base
-T Controller - Paketplaner-Miniport
===========================================================================

nämlich 0x70002

deinstalliere ich beispielsweise das vmnet1 und installiere es wieder bekommt es automatisch die höchste schnittstellennummer und wird somit auch vom java als erste IP Adresse bei InetAddress ausgegeben.

Mein Problem liegt jetzt darin dass ich nicht weiss wie ich einer API (javax) beibringen kann welches Netzwerkinterface diese verwenden soll...

Gibts einen Source Code vom javax.media.MediaLocator ? damit ich eins deiner server socket bind Beispiele verwenden kann?

oder kann ich den MediaLocator durch irgendetwas anderes ersetzen?

vielen dank
jotun
 
G

Guest

Gast
weil ich Schnittstellen habe die nicht nach aussen geroutet werden

Sprich die sind von aussen nicht erreichbar wenn die api so wie eine andere die ich verwende auf 0.0.0.0 binden würde wäre es mir ja auch recht aber die falsche ip is halt blöd
 
T

tuxedo

Gast
Ich auch nicht. Bei verbindungen via "localhost" (und das sieht stark danach aus ;-) ), ist es völlig wurscht welches Interface benutzt wird, da AFAIK eh kein einziges Byte die Netzwerkkarte wirklich erreicht.

- Alex
 

HoaX

Top Contributor
eben, und wenn die pakete den rechner verlassen haben die pakete die passende absenderadresse automatisch, dafür hat ja der rechner ne routingtabelle.
 
G

Guest

Gast
hmmm ok .. ich versuchs nochmal

ich bin server und habe zwei netze

IP öffentlich 80.34.122.72

IP intern 192.168.1.1

wenn mein programm nun einen listen socket auf 192.168.1.1 aufbaut und nicht auf die öffentliche ...
dann kommt ein client der beispielsweise auf 80.34.122.72:8080 verbinden möchte nicht mehr hin

es sei denn der server socket würde auf 0.0.0.0:8080 hören dann wärs wie ihr sagt wurscht ob ich vom öffentlichen oder vom lokalen netz komme

blöderweise baut meine api auf die lokale IP auf weil eben der anscheinend nach dem schnittstellenindex aus dem windows route print den höchsten index als bind addr nimmt.

eine ausgehende verbindung is völlig egal da sucht sich durch windows routing eh das richtige interface von selbst

oder hab ich jetzt nach tagelangem grübeln einen mega knoten im hirn? :bahnhof:
 

HoaX

Top Contributor
in deinem beispielcode bist du aber client und nicht server?

new InetAddress("0.0.0.0") oder so und fertig!?
 
T

tuxedo

Gast
Entweder auf 0.0.0.0 binden, oder halt auf die jeweilige IP. Aber wie ich schon ganz am Anfang geschrieben hab betrifft das die Serversocket.

Bei Clientverbindungen ist das prinzipiell wurscht wenn a) das Routing stimmt und b) im OS alles korrekt eingestellt ist.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T udp socket an interface binden Netzwerkprogrammierung 3
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
B Codierung bei der Anbindung an eine REST API Netzwerkprogrammierung 3
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
L ActiveMq - wie kann ich eine Queue löschen? Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
N eine klasse mit server & client Netzwerkprogrammierung 5
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
V Alle Ip-Adressen eine Lokalen-Netzwerkes erfragen Netzwerkprogrammierung 9
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
E Wie erstelle ich eine blockiernde Funktion? Netzwerkprogrammierung 12
G Warum eine java.net.ConnectException? Netzwerkprogrammierung 7
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
A Anmeldung an eine Active Directory? Netzwerkprogrammierung 5
T Möglichkeit über das Netzwerk eine Funktion zu starten? Netzwerkprogrammierung 2
F String in eine URL umwandeln Netzwerkprogrammierung 7
M Wie empfange ich eine ftp liste? Netzwerkprogrammierung 12
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
R auf RemotPC eine Applikation starten Netzwerkprogrammierung 10
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben