¿Alguien puede simplemente explicar las diferencias entre el modo pasivo FTP (PASV) y el modo pasivo extendido FTP (EPSV)?
¿Alguien puede simplemente explicar las diferencias entre el modo pasivo FTP (PASV) y el modo pasivo extendido FTP (EPSV)?
Respuestas:
La única diferencia es que PORT/PASV
están limitados a IPv4 , mientras EPRT/EPSV
funcionan con cualquier protocolo de red (aunque solo se usa IPv6 en la práctica).
Los comandos estándar PORT
(activo) y PASV
(pasivo) en el protocolo de control FTP intercambian la dirección y la información del puerto como seis decimales de 1 byte , desde los cuales el otro extremo debe reconstruir una dirección IP de cuatro bytes y un número de puerto TCP de dos bytes.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Pero luego comenzaron a aparecer otros protocolos. IPv4 estaba a punto de ser reemplazado por "IPng", que tenía bastantes propuestas de reemplazo de la competencia (OSI CLNP, TUBA, SIP, SIPP, CATNIP, en varios momentos de la historia), algunas con tamaños de dirección de host más cortos, más largos e incluso variables , hasta que finalmente se definió IPv6 con direcciones de 16 bytes.
Simplemente enviar más bytes no hubiera funcionado: no se podía esperar que los servidores y los clientes conocieran el protocolo correcto basado únicamente en la longitud de la dirección. (Por ejemplo, ¿qué sucede si tiene un protocolo con dirección de 16 bytes + puerto de 4 bytes, otro con dirección de 12 bytes + puerto de 12 bytes?)
Además, a pesar de que esto era menos importante hace 20 años, en la actualidad hay millones de dispositivos NAT en Internet, que inspeccionan y destrozan las conexiones de control FTP para que el host "externo" solo vea las direcciones IPv4 globales, incluso si el "interior" El host envió un RFC1918 local. Incluso sin NAT, los firewalls con estado a menudo observan los comandos de control para permitir automáticamente una conexión de datos sin reglas manuales.
Básicamente, esto significa que simplemente enviar más números con PORT
o PASV
está garantizado para romper para muchas personas. Quizás algunos firewalls malinterpretarían silenciosamente algunos bytes de dirección como el puerto y descartarían silenciosamente el resto; otros pueden desconectar la conexión o simplemente bloquearse.
Para evitar varios problemas como el anterior, se tuvieron que introducir nuevos comandos para la compatibilidad con múltiples protocolos en FTP.
En 1993, RFC 1639 (originalmente RFC 1545 ) introdujo la "dirección larga" LPRT
y losLPSV
comandos, que eran como PORT
& PASV
pero con una longitud de dirección variable ; también incluyeron el identificador de tipo de protocolo. (Sin embargo, no cambió la sintaxis: dirección IPv6: el puerto simplemente se enviaría como 21 números en lugar de seis).
LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>
LPRT 4,4,132,235,1,2,2,24,131
LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162
Sin embargo, eso todavía no solucionó algunos de los problemas, como pedirle a un servidor que use un protocolo diferente al de la conexión de control. El RFC también se desactualizó rápidamente; cuando IPv6 salió solo un año después, no se pudo usar con LPRT porque no tenía asignado un identificador de protocolo LPRT (solo para las diversas propuestas iniciales).
Para solucionar esto, RFC 2428 en 1998 agregó EPRT
y EPSV
, también conocido como "puerto extendido" y "pasivo extendido" , que también tenía un método para negociar un protocolo que admite ambos extremos. Los comandos "extendidos" también envían direcciones en forma legible para humanos, para IPv6, eso significa usar la notación hexadecimal y dos puntos, en lugar de una serie de números decimales separados.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
En conclusión, el soporte de IPv6 es la única diferencia.
EPSV
respuesta no incluye la dirección IP (qué PASV
respuesta sí). Esto es para evitar un problema común cuando el servidor FTP ubicado detrás de un NAT no sabe que es una dirección IP externa y confunde al cliente FTP enviándole su dirección interna.
La diferencia entre activo y pasivo ya está respondida. La pasiva extendida (EPSV) es solo pasiva con IPv4 e IPv6, porque la sintaxis de la respuesta a PASV era específica de IPv4 y, por lo tanto, se necesitaba un nuevo comando para IPv6. Lo mismo con EPTR vs. PUERTO en modo activo. Hay un comportamiento ligeramente diferente con EPRT y EPSV en que solo pueden contener el puerto, no IP y el puerto como PUERTO y PASV. Por lo tanto, la transferencia de datos solo se puede hacer entre los sistemas que tienen la conexión de control. Con PORT y PASV es posible crear una conexión de datos entre otros sistemas (aunque hoy en día esto se considera un mal diseño y un riesgo de seguridad).