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

Développement Discussion :

[System.Net.Sockets] Connexion via un proxy


Sujet :

Développement

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut [System.Net.Sockets] Connexion via un proxy
    Bonjour tous le monde,

    j'aimerai effectué une connexion FTP avec System.Net.Sockets en passant par un proxy.

    C'est possible ?

    Si oui, comment faire ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Utilise la classe FtpWebRequest (dans le namespace System.Net), plutôt que de réinventer la roue... elle permet, entre autres, de spécifier le proxy à utiliser

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Malheureusement, j'utilise un composant maison que je dois adapter ...

    j'aurais bien voulu moi, passer par FtpWebRequest ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Aïe... ça se complique alors
    Je pense qu'il faut implémenter le protocole du proxy, mais je sais pas trop comment ça marche...
    Tu auras peut-être plus de chances sur un forum plus spécialisé sur le développement réseau, celui là par exemple. Dis moi si tu veux que je déplace la discussion.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    oui, va y, déplace
    merci pour le lien, je vais regarder déjà s'il y a des infos

    En plus, c'est du .net 1.1 ...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    j'ai trouvé une classe C# pour me connecter à un serveur via un proxy.

    Problème, j'ai l'erreur suivante :
    Une connexion existante a dû être fermée par l'hôte distant.
    Quelqu'un pourrait-il m'expliquer ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ca veut dire que le serveur, ou le proxy, a interrompu la connexion...
    Pour info, c'est quoi la classe que tu as utilisée ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Une classe (en fait un ensemble de classe) que j'ai récupéré sur le site
    http://www.mentalis.org/

  9. #9
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    je développe aussi une classe FTP et je cherche le protocole proxy.
    Je suis allé sur le site http://www.mentalis.org/soft/class.qpx?id=9
    Mais c'est compliqué il y a 4 types proxy :
    HTTP1.1,
    SOCK4,
    SOCK4A,
    SOCK5

    En plus, il y a des proxy FTP :
    SITE,
    USER après logon,
    Proxy OPEN,
    Transparent,
    USER RemoteID@RemoteHost,
    USER FireID@Remotehost,
    USER RemoteID@RemoteHost FireID,
    USER RemoteID@FireID@RemoteHost

    je suis perdu

    J'ai trouvé ce document : http://www.codeproject.com/KB/cpp/ProxyFtp.aspx
    mais je ne comprend pas comment on peut spécifier un port si le serveur qu'on veut atteindre n'est pas sur le port 21

    EDIT :
    il suffit de faire adresse_de_mon_serveur:port !!! Cool non ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    J'ai réussi à implémenter la classe

    La connexion FTP fonctionne nickel, avec ou sans proxy :j'arrive à gérer les deux cas.

    Cependant, je suis confrontée à un autre problème à présent :
    Lorsque je vais uploader un fichier, j'ai une erreur 500

    Le log est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PUT "D:\USER\TEMP\monFile.xip"
    500 Syntax error, command unrecognized.
    Mon code est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void execute(String command)
    {
    	if(this._debug == true)
    		this._trace += "\n" + command;
    	byte[] cmdbytes = this._encode.GetBytes((command + "\r\n").ToCharArray());
    	this._clientSocket.Send(cmdbytes, cmdbytes.Length, SocketFlags.None);
    	this.readReply();
    }
    En sachant que this._clientSocket est de type proxySocket qui lui même hérite de la classe System.Net.Socket

    J'appelle la méthode ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.execute(@"PUT ""D:\USER\TEMP\monFile.xip""");
    Lorsque je me connecte via une fenêtre dos, et que je tape la commande, elle fonctionne... mais lorsque je passe par mon application, ça plante.

    Une idée ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par kendras Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PUT "D:\USER\TEMP\monFile.xip"
    500 Syntax error, command unrecognized.
    En général on utilise plutôt la commande STOR, non ?
    Et le chemin que tu as mis ressemble à un chemin local... normalement c'est le chemin sur le serveur qu'on envoie

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    Le chemin du fichier est bien correct, car je test sur ma machine de développement.

    Quand à la commande, je dois utiliser la commande PUT, car le fichier doit être déposé "in one shot"

  13. #13
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Attention, là tu confonds commande de l'utilitaire ftp (ftp.exe) qui implémente la commande PUT et la commande FTP qui est STOR.

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par bubulemaster Voir le message
    Attention, là tu confonds commande de l'utilitaire ftp (ftp.exe) qui implémente la commande PUT et la commande FTP qui est STOR.
    Apparemment la commande PUT existe, mais n'est pas définie dans la RFC 959
    http://en.wikipedia.org/wiki/List_of_FTP_commands
    Mais je sais pas quelle est la différence entre PUT et STOR...

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 331
    Points : 180
    Points
    180
    Par défaut
    A priori (pour celles et ceux qui parlent le c#), mon problème viendrait du fait que je sois en mode actif :
    Voici mon ch'tit bout de code :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    string sLocAddr = this._clientSocket.LocalEndPoint.ToString();
    
    int ix = sLocAddr.IndexOf(':');
    if (ix < 0)
    	throw new Exception("Failed to parse the local address: " + sLocAddr);
    
    string sIPAddr = sLocAddr.Substring(0, ix);
    
    // let the system automatically assign a port number (setting port = 0)
    ep = new IPEndPoint(IPAddress.Parse(sIPAddr), 0);
    listening_sock.Bind(ep);
    sLocAddr = listening_sock.LocalEndPoint.ToString();
    
    ix = sLocAddr.IndexOf(':');
    if (ix < 0)
    {
    	throw new Exception("Failed to parse the local address: " + sLocAddr);
    }
    int nPort = int.Parse(sLocAddr.Substring(ix + 1));
    //
    //				// start to listen for a connection request from the host (note that
    //				// Listen is not blocking) and send the PORT command
    listening_sock.Listen(1);
    string sPortCmd = string.Format("PORT {0},{1},{2}", 
    	sIPAddr.Replace('.', ','),
    	nPort / 256, nPort % 256);
    this.execute(sPortCmd);
    if (this._ftpCodeReturn != 200)
    {
    	listening_sock.Close();
    	throw new Exception("Failed to on command : " + sPortCmd);
    }
    data_sock = listening_sock.Accept();
    listening_sock.Close();
    listening_sock = null;
    this._clientSocket est une connexion FTP passant par un proxy

    Sur la ligne, data_sock = listening_sock.Accept(), ça freeze ....

    En gros, je suis sensée ouvrir une connexion (qui me permettra de faire mon PUT) sur une connexion existante...

  16. #16
    Membre régulier Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 86
    Points
    86
    Par défaut
    bonjour je suis débutant en C# et je développe une application pour un PPC sous Windows Mobile 5...
    le programme doit envoyé un fichier sur un PC distant, jais d'abord pensé a un simple dossier partagé et faire un file.copy mais ça marche pas alor je me suis rabattue sur le ftp mais la je suis complètement perdue

    je voudrais utiliser la classe System.Net.Sockets pour faire un simple up.

    pouvez vous me donné un bout de votre code pour cette simple action.

    merci d'avance!!!

Discussions similaires

  1. Actualiser requete TcpClient() "System.Net.Sockets"
    Par vincent1890 dans le forum VB.NET
    Réponses: 7
    Dernier message: 18/11/2012, 18h54
  2. [c#] utilisation de System.Net.Socket
    Par TERRIBLE dans le forum Framework .NET
    Réponses: 1
    Dernier message: 21/12/2009, 09h35
  3. Test de connexion via un proxy squid.
    Par byloute dans le forum Réseau
    Réponses: 0
    Dernier message: 27/02/2009, 11h25
  4. [System.Net.Sockets.TcpListener] multi port
    Par clemsouz dans le forum Windows Forms
    Réponses: 11
    Dernier message: 31/10/2007, 09h28
  5. Connexion via Socket JAVA
    Par jihene dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2006, 18h50

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