Créer un client FTP en utilisant l'UDP

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

hello !

suite à la demande de Nohar, j'ai commencé à rédiger un extrait sur comment faire un client FTP en utilisant de l'UDP.

et voici donc … ce que j'obtiens !

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
C:\Users\Moustillon\Desktop\tutos-articles ZdS\articles\creer client ftp>ftp_en_udp
$ list
Sending request ...
Receiving ...
220 ftp.debian.org FTP server

$ cwd
Sending request ...
Receiving ...
530 Please login with USER and PASS.

$

et le code :

 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
import socket

params = ('ftp.debian.org', 21)

commands = {
    "cwd": "CWD",
    "list": "LIST"
}

sock = socket.create_connection(params, 10, source_address=None)
file = sock.makefile('r', encoding="latin-1")

while 1:
    usercommand = input("$ ")
    cmd = usercommand.split(" ")[0]
    args = usercommand.split(" ")[1:]

    if cmd.lower() in commands.keys():
        print("Sending request ...")
        sock.sendto(commands[cmd.lower()].encode() + b'\r\n', params)
        print("Receiving ...")
        data = file.readline(8192)
        print(data)
    else:
        print("Unrecognized command")

vous devez vous demander pourquoi je post ici je pense. et bien c'est parce que dans mon exemple j'ai tapé list, et j'aurais du avoir un debian/ qui s'affiche.

or rien.

et je ne suis pas sur que cela soit lié au fait que je ne sois pas connecté :/

m'enfin je vais essayer de m'identifier, et je vous dis des nouvelles. si jamais quelqu'un pense comme (moi faut quand meme s'identifier en anonymous je crois), dites le !

merci à vous

Ma chaine YouTube ! | Seventh, un micro langage communautaire ! | Mon projet : Unamed (en pleine reprogrammation en C++11/SFML2.4) | Mon tuto sur Pygame !

+0 -0

FTP utilise normalement deux connexions : une de contrôle pour la transmission des commandes et une autre pour la transmission des données.

Tu ne devrais donc pas t'attendre à recevoir la liste des fichiers mais le résultat de la commande (OK, NOK, refusée, etc.).

Du coup, deux possibilités : soit les résultats de ta commande devraient être envoyées sur un autre port (ici, nul part, donc). Soit ton serveur utilise le même port et effectivement, il attend une nouvelle connexion (une nouvelle connexion au sens client/serveur, donc pas forcément l'authentification d'un compte particulier).

Shave the whales! | Thistle

+0 -0
Staff

Si, mais ça a d'autres avantages, comme le fait que le serveur (et le client) peuvent détecter et réagir immédiatement si une connexion est perdue, par exemple.

Sinon, je ne t'ai pas demandé de montrer un exemple sans ftplib par hasard : ce n'est pas un protocole trivial et il repose effectivement sur l'existence de deux connexions simultanées entre le client et le serveur (voir sur la RFC, page 8).

Cela dit si tu regardes comment est implémentée la classe ftplib.FTP, tu t'apercevras que Python peut gérer ça de façon relativement transparente.

Édité par nohar

I was a llama before it was cool

+0 -0
Auteur du sujet

ah oui, c'est sur c'est du TCP ça ;)

mais j'arrive quand meme a l'utiliser avec sendto :D

m'enfin je vais faire un .bind la dessus apres, pour repasser vraiment en UDP

sinon, je me suis identifié avec USER anonymous et PASS 123, mais apres il faut faire un PASV port sauf que ca fait tout planter a la premier commande …

je reessaye

Ma chaine YouTube ! | Seventh, un micro langage communautaire ! | Mon projet : Unamed (en pleine reprogrammation en C++11/SFML2.4) | Mon tuto sur Pygame !

+0 -0
Staff

Ouais mais d'un autre côté la stack classique utilise TCP. Vu que ce n'est que la couche de transport je trouve pas que ça apporte grand chose, pedagogiquement parlant, à ton tuto. Au contraire ça risque de distraire le lecteur sur une question périphérique alors qu'il va déjà devoir s'accrocher pour suivre ton code et comprendre le protocole.

Qui plus est, si tu rajoutes une couche de TLS/SSL pour sécuriser la connexion, celle-ci sera à coup sur encapsulée dans du TCP.

Enfin, il est vrai que TCP a le mérite de te garantir que tes fichiers n'arriveront pas corrompus, même en conditions de transmission dégradées.

Édité par nohar

I was a llama before it was cool

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte