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.
Merci pour votre aide.
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); }
Partager