Vaya al final me pico la curiosidad :)
Al entrar en modo pasivo recibes una lista de numeros, que son una redireccion a una ip y un nº de puerto. La redireccion puede apuntar al mismo servidor o a otro, eso es lo de menos porque siempre tienes que parsear ese dato y usar el que te diga el servidor. Esto es lo que recibo en un test:
Código C:
Ver originalEntering Passive Mode (127,0,0,1,207,22)
Parseo por comas los 4 primeros campos que son la redireccion (en este caso me dice que conecte a mi propio equipo por el loopback). Ahora me quedan los 2 campos finales que tambien los parseo y los convierto a enteros, de forma que tengo hp=207 y lp=22, con esto reconstruyo en numero de puerto pasivo en el que me estará esperando el servidor
Te preguntaras: ¿eso para que? En el rfc tienes la descripcion de todo eso mas completa que lo que yo te pueda contar
http://www.faqs.org/rfcs/rfc959.html Si no quieres leerlo tiene algo que ver en que todos los valores de ese resultado son representaciones textuales de enteros de 8 bits; el puerto está en 16 bits, luego haces esa operacion para crear un 16 bits a partir de los dos recibidos. Ojo, ese puerto que generas no esta en network byte order, es decir que cuando vas a crear el socket de trabajo tendras que usar el htons igualmente. Cuando se comenta esto suele decirse: me lo creo y paso a lo siguiente :)
Ahora solo te queda hacer una nueva conexion a la ip que recibes con ese puerto y empezar a subir.
Saludos
vosk