Donnerstag, Februar 27, 2020

Start Optionen zu erzwingen, Java socket-verbindungen zu localhost?

Ich versuche einen Weg zu finden, um Kraft jeder Verbindungsversuch ein Glas macht auf eine externe IP durch meinen proxy-server, der auf localhost(Auch eine Java-Anwendung).
Sobald der proxy-server empfängt die Verbindung, öffnet eine Verbindung mit der externen IP und beginnen, die Weiterleitung der IO zu und von der client – /server.

Ich habe schon Googeln dieses für 2 Tage, und ich habe nicht hatte kein Glück, ich glaube ich verwende die falschen Begriffe in meine such-versuche.

Wenn Sie irgendwelche Ideen haben, bitte lassen Sie mich wissen, werde ich alles versuchen.

Vielen Dank im Voraus. – Sean.

InformationsquelleAutor Whatcannon | 2009-10-17

3 Kommentare

  1. 5

    Wenn ist, dass ein „echter“ Proxy, der könnten Sie den proxy verwenden Verwendung von java-system-Eigenschaften.

    Haben Sie zwei alternativen:

    1. Geben Sie den proxy in der Befehlszeile
    2. Fest in Ihrer app

    Gut, Sie haben tatsächlich drei

    1. Angeben .properties-Datei, und Lesen Sie von dort aus, und legen Sie es als System-property ( das ist ziemlich viel, option 2, aber mehr Dynamik )

    Aus der Befehlszeile, die Sie verwenden werden:

     java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -jar YourJar.jar

    Mit, dass alle http-verbindungen ab, die Sie ausführen, gehen durch localhost im Hafen 8080

    Das zweite ist, fügen Sie diese in der main-Methode des Programms:

    public static void main( String [] args ) { 
        System.setProperty("http.proxyHost", "localhost");
        System.setProperty("http.proxyPort", "8080");
        .....
    }

    Die nicht die gleiche.

    Schließlich laden von myapp.properties

    public static void main( String [] args ) { 
        try { //there are cleaner ways of course 
            ResorceBundle bundle = ResourceBundle.getBundle("myapp");
            System.setProperty("http.proxyHost", bundle.getString("proxy.server"));
            System.setProperty("http.proxyPort", bundle.getString("proxy.port"));
        } catch( MissingResourceException missingResourceException ){}
        ....
    }

    Sie müssen nur sicherstellen, dass myapp.properties erhältlich ist der classpath

    Mehr Informationen über diese Funktionalität hier

  2. 1

    Wenn Sie Fragen zur Allgemeinen (NICHT-HTTP – /FTP-spezifischen!) proxying der Socket-verbindungen, dann die einfache Antwort ist, dass es nicht unterstützt wird, die von Java.

    Wenn Sie konfigurieren einen proxy für HTTP-und FTP-Verkehr, der Proxyfunktion passiert bei der Anwendung Protokoll-Ebene. Die Java-side proxy-Eigenschaften sagen, die URLConnection-Schicht, um eine Verbindung zu Ihrem bestimmten proxy anstatt der IP-Adresse aus dem URL Ihre Anwendung versucht, eine Verbindung herzustellen. Die Java-Socket-Ebene ist nicht bewusst, dass dies geschieht. Er sieht nur eine Anfragen um eine Verbindung zu dem proxy.

    Diese Arbeit, weil Sie die HTTP-und FTP-Protokolle gezielt zu unterstützen proxying. Zum Beispiel, die erste ‚Zeile‘ einen HTTP-GET-request-message gibt die vollständige URL der Seite, die der client anfordert. Wenn die GET-Anfrage geht an einen proxy, der proxy kann herausfinden, wo die ist, hat, um es zu senden.

    Blick auf das problem von Proxys auf der Socket-Ebene, die erste Beobachtung ist, dass die standard-Java-Klassenbibliotheken bieten HIERFÜR keine Unterstützung. Die zweite Beobachtung ist, dass es tatsächlich unimplementable … es sei denn, Sie implementieren diese als alternative transport-layer. Der Grund ist, dass IP-und TCP/IP einfach nicht unterstützen das Konzept der explizit die Verwendung von proxyfunktionen oder relaying messages /streams. Und selbst wenn Sie es implementieren, die einen transport, es passt nicht in die standard-Socket-Modell.

    So, wenn Sie wirklich Fragen über die Proxyfunktion alle des Netzwerkverkehrs für eine Java-Anwendung, kann dies nur umgesetzt werden, die außerhalb der JVM; d.h. auf der Netzwerk-Transportebene des JVM ‚ s (physischen oder virtuellen) host-Betriebssystem.

    • Ich nicht völlig einverstanden mit diesem. Seit Java 1.5 gibt es build-in-Unterstützung für SOCKS-proxies (siehe java.net.Socket(Proxy proxy) Konstruktor). Aber, ja, für das HTTP-Protokoll braucht man einige zusätzliche Schicht, die damit umgehen. Apache commons-httpclient Entwickler Versprechen zum hinzufügen dieser Unterstützung: 4.x-version der Bibliothek (siehe wiki.apache.org/HttpComponents/…).
    • Und… ja… es ist eine full-proxy-Unterstützung (zumindest in Java 6 und für HTTP und FTP). Sehen sun.net.www.protocol.ftp.FtpURLConnection#connect() und sun.net.www.protocol.http.HttpURLConnection#plainConnect(). Plus Unterstützung für die Authentifizierung.

Kostenlose Online-Tests