Envío del carácter '@' (signo arroba) en el conector AS3 para inicio de sesión FTP

Estoy intentando crear un cliente FTP en AS3. Funciona bien con casi todos mis hosts ftp, pero no puedo iniciar sesión en hosts en los que tengo un carácter "@" (comercial) dentro del nombre de usuario. Parece un error de codificación de caracteres.

Estoy enviando la cadena de esta manera:

ftp_username = "aaaaa@bbbbb.ccc"
s.writeUTFBytes("USER " + ftp_username + "\n");

pero nunca obtuve una respuesta 331 (nombre de usuario aceptado) del servidor FTP.

ps: intenté reemplazar '@' char con '% 40' o '+' sin éxito.

preguntado el 08 de noviembre de 11 a las 17:11

En su prueba, eliminó la @ pero no el "." punto. De todos modos, siempre debe codificar los datos antes de enviarlos al servidor. Especialmente datos ingresados ​​por el usuario. Así que le sugiero que codifique en base64 los datos antes de enviarlos y luego decodifique en base64 en el lado del servidor. -

@The_asMan: NO deberías estar codificando en base64 ningún dato en este caso. Eso es lo que no se puede hacer con FTP. los @ carácter es perfectamente legal en el USER mando. Algunos proxies FTP requieren que sepa qué nombre de usuario usar para qué nombre de host remoto. -

@vannyn: ¿puede usar Telnet para iniciar sesión con éxito en el mismo servidor FTP usando el mismo nombre de usuario con el @ personaje en ella? Si AS3 y Telnet no pueden iniciar sesión al mismo tiempo, entonces no es un problema de codificación, es un problema del servidor. No todos los servidores admiten direcciones de correo electrónico como nombres de usuario. En cuanto a reemplazar @ con %40 or +, dichos reemplazos no se aplican a FTP. -

@ remy-lebeau-teamb: Sí, intenté iniciar sesión con telnet y funcionó sin problemas enviando al USUARIO aaaaa@bbbbb.ccc. -

@The_asMan Estoy de acuerdo con Remy, sin codificación base64 para comunicaciones ftp. -

1 Respuestas

Al final de la Sección 4.1 de la RFC 959, que se ocupa de los estándares del protocolo FTP, difiere del protocolo Telnet y del código Telnet eol.

Para citar del RFC:

El protocolo de transferencia de archivos sigue las especificaciones del protocolo Telnet para todas las comunicaciones a través de la conexión de control. Dado que el idioma utilizado para la comunicación Telnet puede ser una opción negociada, todas las referencias en las dos secciones siguientes serán al "idioma Telnet" y al "código de fin de línea Telnet" correspondiente. Actualmente, se puede considerar que estos significan NVT-ASCII y <CRLF>. No se citarán otras especificaciones del protocolo Telnet.

Luego de nuevo en RFC 1123, Sección 3.3.1 hace referencia al final de línea correcto como <CRLF>:

El protocolo Telnet define la secuencia CR LF como "fin de línea". Para la entrada de terminal, esto corresponde a una tecla de finalización de comando o "fin de línea" que se presiona en un terminal de usuario; en un terminal ASCII, esta es la tecla CR, pero también puede estar etiquetada como "Retorno" o "Intro".

Luego entra en una discusión sobre la ambigüedad de los finales de línea en diferentes plataformas. Y dice que se deben hacer concesiones para <CR NUL>y \r\0, pero vuelve a decir que <CRLF> debería ser el predeterminado.

En el artículo de Wikipedia para Newlines, también analiza el problema y dice:

La mayoría de los protocolos textuales de Internet (incluidos HTTP, SMTP, FTP, IRC y muchos otros) exigen el uso de ASCII CR + LF (0x0D 0x0A) a nivel de protocolo, pero recomiendan que las aplicaciones tolerantes también reconozcan LF solitario. En la práctica, hay muchas aplicaciones que utilizan erróneamente el carácter de nueva línea de C '\ n' en su lugar (consulte la sección Nueva línea en lenguajes de programación a continuación). Esto genera problemas al intentar comunicarse con sistemas que se adhieren a una interpretación más estricta de los estándares; uno de estos sistemas es el qmail MTA que se niega activamente a aceptar mensajes de sistemas que envían LF desnudo en lugar del CR + LF requerido.

Así que quédate con \r\n y estarás bien ...

Respondido 07 Oct 21, 09:10

Muchas gracias por la aclaración. Mi deambular se debió al hecho de que probablemente algunos servidores ftp linux también aceptan \ n (sin \ r). - vannyn

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.