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 ?
Version imprimable
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 ?
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
Malheureusement, j'utilise un composant maison que je dois adapter ...
j'aurais bien voulu moi, passer par FtpWebRequest ... :(
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.
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 ...
Bonjour,
j'ai trouvé une classe C# pour me connecter à un serveur via un proxy.
Problème, j'ai l'erreur suivante :
Quelqu'un pourrait-il m'expliquer ?Citation:
Une connexion existante a dû être fermée par l'hôte distant.
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 ?
Une classe (en fait un ensemble de classe) que j'ai récupéré sur le site
http://www.mentalis.org/
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 ?
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 :
Mon code est ainsi :Code:
1
2 PUT "D:\USER\TEMP\monFile.xip" 500 Syntax error, command unrecognized.
En sachant que this._clientSocket est de type proxySocket qui lui même hérite de la classe System.Net.SocketCode:
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(); }
J'appelle la méthode ainsi :
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.Code:this.execute(@"PUT ""D:\USER\TEMP\monFile.xip""");
Une idée ?
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"
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...
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 :
this._clientSocket est une connexion FTP passant par un proxyCode:
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;
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...
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 :aie:
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!!!