Appli Reseaux II et ftpd |
Diese Nachricht ist Teil des folgenden Threads: | |
---|---|
Der komplette Thread sortiert nach Datum | |
Pre-Scriptum : la remarque envoyee pour uname est que dans un nieme sous-reseaux, cette commmande ne donne que le nom du sous-reseaux courant. (ou alors je me trompe).
Pre-Scriptum 2: Le qualificatif "sale" pour ta solution (mail de Edgar Bonet Orozco) n'est pas pejoratif, simplement pour dire qu'on utilise une "bombe atomique" pour un petit renseignement (fin du probleme, c'est resolu pour mon appli).
Je suis en train d'ecrire une appli en C (+ GTK1.2) sous Linux pour faciliter le ftp (barbare en ligne de commande). En clair il s'agit d'une interface GTK ou l'utilisateur entre les coord de la machine a contacter puis il n'a plus qu'a cliquer sur des icones pour executer les
commandes ftp (listing, send, get ...). Seulement je ne m'attendais pas a trouver une interface encore plus barbare avec ftpd (puisque je me connecte sur le port 21). Le probleme, donc, se pose pour executer la commande LIST par exemple qui necessite une connection supplementaire (DATA connection). Faut-il programmer un serveur sur la machine locale pour recevoir les donnees du serveur ftp distant? Comment ensuite utiliser la commande PORT (dont la syntaxe reste un mystere h1,h2,h3,h4,p1,p2)? Enfin quand j'envoi au daemon ftp user LOGIN\n pass PASSWD\n il ne semble pas prendre en compte ces commandes (j'utilise des sockets, et les commandes send et recv)
Voici la partie utile du code utilise (on laisse tomber la gestion des erreurs):
/* Socket opening */ fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (fd == -1){ raise_error_double XXX; return(0); }
/* Binding socket on a port */ hook = bind(fd, (struct sockaddr *)&my_addr, LENGTH_SOCK); if (hook == -1){ close (fd); raise_error_simple XXX; return(0); }
their_addr.sin_family=AF_INET; their_addr.sin_port=htons(REMOTE_PORT); /* set to 21 */ their_addr.sin_addr.s_addr=inet_addr(REMOTE_ADDR); bzero(&(their_addr.sin_zero), 8);
/* Connection at least */ bridge=connect(_fd, (struct sockaddr *)&their_addr, LENGTH_SOCK); if (bridge==-1){ close(fd); raise_error_simple XXX return(0); }
sprintf(_mesg,"user %s\n", LOGIN); | send(fd, _mesg, sizeof(_mesg), 0)); | C'est ici que la procedure de LOGIN est | effectuee mais le ftpd distant sprintf(_mesg,"pass %s\n", PASSWD); | ne semble pas obtenir mes commandes send(fd, _mesg, sizeof(_mesg), 0)); | pourquoi? | bzero(DATA, BUF_LEN); recv(_current_socket.fd, DATA, sizeof(DATA), 0); -> ben rien du coup. printf("recu : %s", DATA);
Diese Nachricht wurde auf der folgenden Mailing-List gepostet: | ||||
---|---|---|---|---|
Guilde Mailing-List-Info | Nachrichten um die Zeit | Re: [Debian] Réunion du groupe Guilde Debian | Re: Dream - Login: ( No. 63 Juin 1999 ) |
Archive des listes de la GUILDE administriert von L'administrateur | Lurker (Version 2.3) |