Pour le FTP, en mode passif il est nécessaire que la Box "écoute" les données au dessus de la couche 4 afin d'ouvrir le port demandé pour le transfert de donnée en mode passif.
Non seulement : la box qui écoute c'est la version "soft". C'est ce que ferait une box IPv6 avec pare-feu à états : il suffit d'écouter et d'accepter la nouvelle connexion (création d'un n-uplet).
Si ce n'était que de l'écoute, ce serait simple. C'est beaucoup plus difficile parce qu'il faut
corriger l'adresse de socket (IP et port) : il faut changer "PORT 192,168,a,b,x,y" en "PORT mon.adresse.Internet,u,v".
Le plus souvent u = x et y = v (préservation des ports par défaut sous linux), mais si le n-uplet
(IPv4, TCP, mon.adresse.Internet, x*256+y, adresse.du.serveur.FTP, 21)
existe déjà, il faut en choisir u,v tq
(IPv4, TCP, mon.adresse.Internet, u*256+v, adresse.du.serveur.FTP, 21)
n'existe pas dans la table des connexions.
En plus comme c'est de l'ASCII et non du binaire, "PORT mon.adresse.Internet,u,v" peut être plus long que "PORT 192,168,a,b,x,y" et donc il faut
corriger les numéros de séquence sur les segments suivants envoyés et donc il faut
corriger les numéros ACK sur les segments reçus suivants.
Bien sûr, cela veut dire que les
segments doivent être traités dans l'ordre même s'ils arrivent dans le désordre.
Cela correspond
grosso modo à faire passer la connexion FTP par toute la pile TCP deux fois dans la box.
Par défaut, linux n'espionne que le port 21 à la recherche de commandes FTP, mais on peut donner une liste de ports dans la ligne de commande.