[Java] Binden des Ports eines ServerSockets auf bestimmten Interface

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von fragl0r, 15. Januar 2013 .

  1. 15. Januar 2013
    Zuletzt bearbeitet: 15. Januar 2013
    Binden des Ports eines ServerSockets auf bestimmten Interface

    Moin,

    Aufgabe:
    Ich will wissen ob ein Port auf dem ausführenden Rechner aus dem Internet erreichbar ist. Also im Router geforwarded wird und/oder eine Firewall sagt: "nein".

    bisherigen Versuche:
    Code:
    public boolean checkePort()
     {
     ServerSocket sSocket = null;
     boolean ergebnis = false;
    
     try
     {
     // VARIANTE I
     sSocket = new ServerSocket(25000);
    
     // VARIANTE II
     sSocket = new ServerSocket(25000, 1000, null);
    
     // VARIANTE III
     InetAddress adr = InetAddress.getByAddress(gibIpInByte("0.0.0.0"));
     sSocket = new ServerSocket(25000, 1000, adr);
    
     if (checkPort(intenrnetIP))
     {
     ergebnis = true;
     }
     }
     catch (IOException e)
     {
     e.printStackTrace();
     }
     finally
     {
     if (sSocket != null)
     {
     try
     {
     sSocket.close();
     }
     catch (IOException e)
     {
     e.printStackTrace();
     }
     sSocket = null;
     }
     }
     return ergebnis;
     }
    Ergebnisse:
    Ausführlich:
    Bei mir Zuhause hat die erste Variante wunderbar funktioniert und ich hab das Tool im Freundeskreis freigegeben zum nutzen. Stellte sich aber schnell herraus das es bei manchen ging und bei manchen hies es dann "Port nicht erreichbar". Dachte erst das sie es nicht hinkriegen ihre Firewall abzuschalten oder eben den Router nicht einstellen können. Habs dann selber für einen der Freunde gemacht und hat trotzdem nicht funktioniert. Hab mich dann selber auf die Suche gemacht und festgestellt das ich das selbe Problem über WLan habe, nicht aber über LAN (Am selben Laptop). Meine Vermutung ist, das der Port nur an ein bestimmtes Interface gebunden wird und daher nicht zwangsweise immer aus dem Internet erreichbar ist. Ist die Überlegung richtung und wie Löse ich das Problem?

    Kurz:
    • Alle 3 Varianten laufen über LAN
    • Alle 3 Varianten laufen nicht über WLAN
    • Vermutung: Port wird an bestimmtes Netwerkinterface gebunden.
    • Frage: Ist die Überlegung richtig und wie löse ich das Problem?

    greetz,
    fragl0r
     
  2. 15. Januar 2013
    AW: Binden des Ports eines ServerSockets auf bestimmten Interface

    What Is a Network Interface?

    Könnte interessant sein. Schaue später mal genauer...
     
  3. 15. Januar 2013
    AW: Binden des Ports eines ServerSockets auf bestimmten Interface

    Danke, das klärt schonmal einiges. Schaff das Heute aber nicht mich nochmal anzusetzen. Hoffe bald nochmal von dir zu lesen.
     
  4. 28. Februar 2013
    AW: Binden des Ports eines ServerSockets auf bestimmten Interface

    Eigentlich sollte ob es über WLAN oder LAN geht total egal sein. Ich würde erstmal gucken wie die Einstellungen des Access Point sind.

    Aber vielleicht hat es ja auch schon geklappt ?
     
  5. 28. Februar 2013
    AW: Binden des Ports eines ServerSockets auf bestimmten Interface

    Ne, habs nicht weiter versucht und es geht "so ohne weiteres" leider nicht :-/ Irgendwas musste man da noch rumbasteln.
     
  6. 29. März 2013
    AW: Binden des Ports eines ServerSockets auf bestimmten Interface

    Deine Frage war:Ist die Überlegung richtig? (Wird der Port an ein bestimmtes NI geknüpft)

    Antwort: Jein. Mehrere IP-Adressen können denselben Port nutzen. Aber sobald eine IP-Adresse den Port nutzt, wird dieser blockiert.
    Bei der Arbeit mit Sockets musste ich feststellen, dass man am Besten für jedes gewünschte networkinterface einen eigenen Socket+Port bereitstellt.

    Also beispielsweise für IP:192.168.1.10: 8888 (LAN-Kabel) einen Serversocket, ein zusätzlicher Socket für IP:192.168.2.10: 9999 (WIFI)

    Als default value nimmt sich der Serversocket immer die InetAddress.getLocalHost.getAddress() oder so ähnlich. Das kann dann zu nicht nachvollziehbaren Fehlern führen, wenn es mehrere NetworkInterfaces gibt.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.