IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Proxy SOCKS & Proxy.NO_PROXY


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Proxy SOCKS & Proxy.NO_PROXY
    Bonjour tout le monde,
    Je dois passer par un proxy SOCKS pour toutes les requêtes vers Internet, mais pendant la phase de développement je dois contacter des serveurs en local et donc ne pas passer par le proxy.
    D'après la javadoc, je force donc le proxy à utiliser lors des appels à la méthode openConnection avec Proxy.NO_PROXY.

    Est-ce que quelqu'un pourrait donc m'expliquer pourquoi le test suivant me lève une java.net.SocketException: "Malformed reply from SOCKS server" alors qu'il ne devrait pas passer par le proxy SOCKS ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    package net.wetope.launcher.tests;
     
    import java.net.Proxy;
    import java.net.URL;
    import java.net.URLConnection;
    import junit.framework.TestCase;
     
    public class AppTest extends TestCase {
     
      public void testSmg() throws Exception {
        System.setProperty("socksProxyHost", "127.0.0.1");
        System.setProperty("socksProxyPort", "9999");
     
        URL url = new URL("http://toto.localhost.lan/");
        URLConnection conn = url.openConnection(Proxy.NO_PROXY);
        conn.getInputStream();
      }
    }
    java.net.SocketException: Malformed reply from SOCKS server
    at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:472)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.http://www.http.HttpClient.openServe...lient.java:395)
    at sun.net.http://www.http.HttpClient.openServe...lient.java:530)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:234)
    at sun.net.www.http.HttpClient.New(HttpClient.java:307)
    at sun.net.www.http.HttpClient.New(HttpClient.java:324)
    at sun.net.http://www.protocol.http.HttpURLConn...ction.java:970)
    at sun.net.http://www.protocol.http.HttpURLConn...ction.java:949)
    at sun.net.http://www.protocol.http.HttpURLConn...ction.java:836)
    at sun.net.http://www.protocol.http.HttpURLConn...tion.java:1172)
    at net.wetope.launcher.tests.AppTest.testSmg(AppTest.java:16)
    Le proxy SOCKS est ouvert avec SSH :
    ssh -D 9999 proxy
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Ce comportement est "normal" : tu utilises deux mécanismes différents qui ne sont pas prévu pour fonctionner ensemble.


    Les propriétés "socksProxyHost" et "socksProxyPort" s'applique à toutes les connexion quoi qu'il arrive à partir du moment où elles sont définis.



    La classe Proxy te permet de spécifier un proxy au cas par cas. Mais dans ce cas tu devras le préciser à chaque fois.



    Mais la solution la plus simple serait de passer par ProxySelector, qui permet de choisir d'utiliser un proxy ou pas selon divers critères.


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    	ProxySelector.setDefault(new ProxySelector() {
    		/** Le proxy */
    		private final List<Proxy> proxy = Arrays.asList(
    			new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved("127.0.0.1", 9999) ));
     
    		/** La liste des host qui n'utiliseront pas le proxy */
    		private final List<String> noProxyHost =
    			Arrays.asList("toto.localhost.lan");
     
    		@Override
    		public List<Proxy> select(URI uri) {
    			System.out.println(uri);
    			if (this.noProxyHost.contains(uri.getHost())) {
    				return Collections.emptyList();
    			}
    			return this.proxy;
    		}
     
    		@Override
    		public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
    			// Tu peux gérer les erreurs si besoin
    		}
    	});
    a++

Discussions similaires

  1. proxy socks 5
    Par jbarreau-mainson dans le forum Sécurité
    Réponses: 2
    Dernier message: 15/04/2009, 08h10
  2. Applet et proxy socks
    Par tayoot dans le forum Applets
    Réponses: 1
    Dernier message: 11/06/2008, 15h45
  3. Transfert de fichiers par SFTP / Proxy Socks
    Par Nick56 dans le forum Unix
    Réponses: 0
    Dernier message: 08/03/2008, 16h15
  4. Linux, passer par un proxy SOCKS 5 ?
    Par ramislebob dans le forum Administration système
    Réponses: 1
    Dernier message: 01/10/2006, 15h55
  5. Les serveur proxy socks
    Par berry dans le forum Réseau
    Réponses: 6
    Dernier message: 26/01/2003, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo