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 C Discussion :

Client FTP IPv6


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Client FTP IPv6
    Bonsoir,

    Je développe un client ftp qui fonctionne plutôt pas mal mise à part pour les ipv6 sur le canal de donnée.
    Effectivement, en ipv6 le canal de contrôle s'ouvre, je peux échangé les commandes comme "user", "pass", "pwd", etc... avec le serveur sans problème. Cependant lorsqu'il s'agit d'utiliser le canal de donnée, par exemple avec la commande de listing du répertoire ls (LIST), j'ai le message suivant : "No route to host" de la part de la fonction connect()...
    A noter qu'en utilisant la commande ftp, cela fonctionne parfaitement, donc le problème viens effectivement de mon programme. La fonction de connexion pour le canal de contrôle/donnée est exactement la même mise à part le port du canal de contrôle reçu par le serveur via la commande EPSV.
    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
     
    int				my_connect_ipv6(char *addr, int port) //Addr = ip v6 du serveur & port = port extrait de la commande 229 Extended Passive mode OK (|||10848|)
    {
    	int			s;
    	t_sockaddr_in6	sin;
    	t_protoent		*proto;
    	unsigned char	buff[sizeof(struct in6_addr)];
     
    	printf("Connexion to %s at %d\n", addr, port);
    	if (!(proto = getprotobyname("tcp")))
    		printf(ERROR);
    	if ((s = socket(PF_INET6, SOCK_STREAM, proto->p_proto)) == -1)
    		printf(ERROR);
    	sin.sin6_family = AF_INET6;
    	sin.sin6_port = htons(port);
    	if (inet_pton(AF_INET6, addr, &buff) <= 0)
    		printf("Error : ipv6\n");
    	my_memcpy(sin.sin6_addr.s6_addr, buff, sizeof(sin.sin6_addr.s6_addr));
    	if ((connect(s, (const struct sockaddr *)&sin, sizeof(sin))) == -1)
    		perror(""); //No route to host
    	return (s);
    }
    Merci pour votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Personne à une petite idée ?

  3. #3
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Citation Envoyé par sbill Voir le message
    Bonsoir,

    Je développe un client ftp qui fonctionne plutôt pas mal mise à part pour les ipv6 sur le canal de donnée.
    Effectivement, en ipv6 le canal de contrôle s'ouvre, je peux échangé les commandes comme "user", "pass", "pwd", etc... avec le serveur sans problème.
    (1)Cependant lorsqu'il s'agit d'utiliser le canal de donnée, par exemple avec la commande de listing du répertoire ls (LIST), j'ai le message suivant : "No route to host" de la part de la fonction connect()...

    (2)A noter qu'en utilisant la commande ftp, cela fonctionne parfaitement, donc le problème viens effectivement de mon programme. La fonction de connexion pour le canal de contrôle/donnée est exactement la même mise à part le port du canal de contrôle reçu par le serveur via la commande EPSV.
    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
     
    int				my_connect_ipv6(char *addr, int port) //Addr = ip v6 du serveur & port = port extrait de la commande 229 Extended Passive mode OK (|||10848|)
    {
    	int			s;
    	t_sockaddr_in6	sin;
    	t_protoent		*proto;
    	unsigned char	buff[sizeof(struct in6_addr)];
     
    	printf("Connexion to %s at %d\n", addr, port);
    	if (!(proto = getprotobyname("tcp")))
    		printf(ERROR);
    	if ((s = socket(PF_INET6, SOCK_STREAM, proto->p_proto)) == -1)
    		printf(ERROR);
    	sin.sin6_family = AF_INET6;
    	sin.sin6_port = htons(port);
    	if (inet_pton(AF_INET6, addr, &buff) <= 0)
    		printf("Error : ipv6\n");
    	my_memcpy(sin.sin6_addr.s6_addr, buff, sizeof(sin.sin6_addr.s6_addr));
    	if ((connect(s, (const struct sockaddr *)&sin, sizeof(sin))) == -1)
    		perror(""); //No route to host
    	return (s);
    }
    Merci pour votre aide.
    Bonsoir
    En général ce genre de message veut dire deux choses.
    La première cela se traduit par, votre application ne trouve pas un chemin dans la table de routage pour l'adresse IP que vous lui avez fournie et c'est ce qui explique votre message d'erreur.
    La seconde est que votre application est en mode passive (ou peut être active) et que votre pare-feu n'a pas été configuré.

    (1):Un canal de données est un canal ou une autoroute sur lequel il y a que les données qui circulent et ce canal ne dure que le temps d'acquisition ou d'émission des données alors pourquoi émettre une commande sur ce canal, quel est l'intérêt ?

    (2)Dans le cas actuel c'est tout à fait normal que la commande fonctionne car elle s'utilise derrière un pare-feu (il me semble, "norme RFC 2428" sur la commande).
    La première étape de résolution de votre problème passe en premier par la configuration de votre pare-feu et en complement lire la norme sur FTP ça aide.
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    La seconde est que votre application est en mode passive (ou peut être active) et que votre pare-feu n'a pas été configuré.
    L'application est effectivement en mode passive, la commande "ftp" fonctionne parfaitement dans les même conditions (même machine, mode passive) donc je ne pense pas que l'erreur vient de la configuration de mon par-feu. D'autant plus qu'avec les ipv4 tout fonctionne parfaitement.

    (1):Un canal de données est un canal ou une autoroute sur lequel il y a que les données qui circulent et ce canal ne dure que le temps d'acquisition ou d'émission des données alors pourquoi émettre une commande sur ce canal, quel est l'intérêt ?
    La commande LIST (qui permet le listing du répertoire courant du serveur ) est envoyé via le canal de contrôle, cette commande déclenche l'ouverture du canal de donnée sur lequel le listing du répertoire est envoyé par le serveur, une fois les données reçu le canal de donnée est immédiatement fermé. Autrement dit je respecte, le schéma que tu as décris ci-dessus.

    La première étape de résolution de votre problème passe en premier par la configuration de votre pare-feu et en complément lire la norme sur FTP ça aide.
    Justement, le fait que cela fonctionne pour la commande ftp, pourquoi devrais-je configurer mon par-feu pour mon client ftp qui respecte les même conditions que la commande ftp ? (J'ai lu, respecté a norme RFC 959).

    Merci.

  5. #5
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour
    Désolé, je n'avais pas compris comme ça. Je pensais que vous utiliser le canal de données pour transmettre vos ordres.
    Ceci dit personnellement je penche toujours sur le cas du pare-feu. Essayer de définir une route c'est-à-dire application vers un service ou port donné et si possible pourriez-vous nous fournir le code sources plus en détail ?
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

Discussions similaires

  1. Client FTP
    Par Invité4 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 31/08/2005, 16h47
  2. Explorateur à distance (comme client FTP)...
    Par Annaced dans le forum Web & réseau
    Réponses: 3
    Dernier message: 01/06/2005, 13h05
  3. Librairie client FTP
    Par Anonymous dans le forum Développement
    Réponses: 2
    Dernier message: 14/05/2004, 15h35
  4. Client FTP sous Linux ?
    Par DgG dans le forum Réseau
    Réponses: 7
    Dernier message: 26/01/2004, 19h26

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