Comment faire pour démarrer en mode actif pour le protocole FTP client en C, linux
Je dois écrire un peu de ligne de commande client FTP pour linux en C. Il fonctionne très bien pour les utilisations courantes (répertoire de la gestion, la récupération et le stockage de fichiers, etc.), et je tiens à ajouter le mode actif (au moment de chaque transfert est effectué en vertu de la mode passif).
Je sais que je dois envoyer une commande sous la forme d' :
PORT a,b,c,d,e,f
où a b c d
sont les blocs d'adresses ip et e f
les numéros de port. Cependant, ce que je comprends, l'ip doit être l'ip de la machine sur laquelle mon client est en cours d'exécution, mais j'ai été conseillé d'utiliser getsockname()
. De ce que j'ai testé, getsockname()
me met l'adresse ip locale de l'interface(s) utilisé par mon socket, pas mon ip vu de l'internet. Je ne peux pas donner cette adresse ip pour le serveur de connexion.
La question est : suis-je la compréhension de la commande PORT
correctement, et comment obtenir l'adresse ip correcte pour l'envoyer ?
Vous devez vous connecter pour publier un commentaire.
FTP mode actif signifie que le serveur ouvre une connexion à un client et envoie des données ifself. Il est souvent peu pratique, de sorte que le mode passif a été inventé: le serveur ouvre un port supplémentaire, qui écoute les connexions entrantes et commence la transmission lorsque quelqu'un est connecté.
Donc, un mode passif session ressemble à ceci:
Tandis qu'un exemple d'une session active:
P. S. FTP est un très ancien protocole (définition de circa 1970), défini quand il n'y avait pas de routeurs, de portes et d'autres modes de transport au niveau des goodies, habituellement, il y a plusieurs machines, directement connecté, de sorte que le mode actif fonctionne très bien, le mode passif est de savoir comment le protocole survit aujourd'hui.
Donc, oui, vous avez reçu la commande du PORT de droite, mais il n'y a pas de méthode uniforme pour obtenir votre adresse IP externe (il peut y avoir plusieurs IPs dans plusieurs réseaux différents sur la machine locale, il peut y avoir plusieurs portes avec leurs propres réseaux sur le chemin vers le serveur, lequel voulez-vous utiliser?). La deuxième partie de la question, comment faire pour obtenir votre adresse IP qu'il est vu par le serveur, ne peuvent pas être répondues (c'est ce que le mode passif est pour).
Si vous êtes derrière un NAT, c'est le NAT responsabilité de la rupture à la fin à la fin de principe^W^W^W^WNAT l'adresse de PORT/226 commandes/réponses. NAT doit prendre en charge FTP explicitement.