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

Réseau/Web Python Discussion :

Problème client FTP mode ACTIF


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut Problème client FTP mode ACTIF
    Bonjour,

    Je programme un client FTP.
    Apres avoir fait le mode PASSIF, je m'attaque au mode ACTIF.

    Voici le code pour la fonction LIST :

    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
     
    # fonction list mode actif
    def listAct(maSock,portAct):
        # on recupere notre ip
        while 1:
            ip_donnees = raw_input("Votre adresse ip : ")
            re_ip = re.compile(r"^([1,2]{0,1}[0-9]{0,1}[0-9]{1}).([1,2]{0,1}[0-9]{0,1}[0-9]{1}).([1,2]{0,1}[0-9]{0,1}[0-9]{1}).([1,2]{0,1}[0-9]{0,1}[0-9]{1})$")
            ip = re_ip.search(ip_donnees)
            if ( ip ):
                ip = ip.group(1)+','+ip.group(2)+','+ip.group(3)+','+ip.group(4)
                # on recupere le port
                port1 = portAct//256
                port2 = portAct%256
                portAct += 1
                adrAct = ip+','+str(port1)+','+str(port2)
                break
        # PORT
        print "Commande :\tPORT "+adrAct
        maSock.sendall("PORT "+adrAct+"\r\n")
        resp = maSock.recv(1024).rstrip('\r\n')
        print "Reponse  :\t"+resp
        maSocketDonnees = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
        maSocketDonnees.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        maSocketDonnees.bind((ip_donnees,portAct))
        maSocketDonnees.listen(socket.SOMAXCONN)
        # LIST
        print "Commande :\tLIST"
        maSock.sendall("LIST\r\n")
        resp = maSock.recv(1024).rstrip('\r\n')
        print "Reponse  :\t"+resp
        print "accept..."
        (nll_conn,depuis) = maSocketDonnees.accept()
        print nll_conn+' depuis : '+depuis
         ....
    Ca bloque au niveau du accept :

    $ ./clientFTP.py
    Entrez l'adresse du serveur ftp : 210.96.16.205
    Entrez le port du serveur ftp [21] :
    Entrez votre username [anonymous] :
    Entrez votre password [bob@bob.com] :
    Gestion du transfert ACTIF/PASSIF [PASSIF] : ACTIF
    Mode du transfert des fichiers I/A [I] :
    Commande : Connect(210.96.16.205,21)
    Reponse : 220 Microsoft FTP Service
    Commande : USER anonymous
    Reponse : 331 Anonymous access allowed, send identity (e-mail name) as password.
    Commande : PASS bob@bob.com
    Reponse : 230 Anonymous user logged in.
    Commande : TYPE I
    Reponse : 200 Type set to I.
    Votre adresse ip : 172.16.7.239
    Commande : PORT 172,16,7,239,100,184
    Reponse : 200 PORT command successful.
    Commande : LIST
    Reponse : 150 Opening BINARY mode data connection for /bin/ls.
    accept...
    J'ai testé avec FileZilla en mode ACTIF, ça fonctionne parfaitement.
    Donc je ne pige pas pourquoi avec mon client non.

    Si quelqu'un voit l'erreur..
    Merci !

    Sorry

  2. #2
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    Quelqu'un pourrait deplacer mon topic en "Developpement Reseaux".

    Merci

  3. #3
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    J'ai analysé les trames avec Wireshark.

    Quand l'hôte distant envoie un SYN sur le port actif (donc après avoir reçu la commande PORT), mon système lui envoie un RST

    En revanche, quand j'utilise filezilla en mode ACTIF, pas de RST... donc mon programme doit merdouiller quelque part...

  4. #4
    Membre éclairé Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Par défaut
    J'ai trouvé ! Je suis vraiment débile !

    J'incrémente portAct après le PORT (pour la futur transaction il est parfois preferable d'etre sur un autre port) mais AVANT le bind... du ma socket n'ecoutait pas sur le bon port...

    Deux jours que je suis bloqué à cause de ça...

    Bonne jourée !
    Sorry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Client FTP
    Par DisqueDur dans le forum C#
    Réponses: 0
    Dernier message: 28/07/2011, 15h22
  2. C# FTP mode actif
    Par kheironn dans le forum C#
    Réponses: 2
    Dernier message: 22/11/2010, 12h27
  3. ftp : mode actif ou passif ?
    Par troumad dans le forum OVH
    Réponses: 0
    Dernier message: 06/11/2010, 10h00
  4. Problème client FTP
    Par matrix_ceg dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 12/09/2009, 10h49
  5. [Client FTP][C++] Problème au niveau des commandes
    Par agent007se dans le forum Développement
    Réponses: 4
    Dernier message: 19/04/2006, 15h15

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