Colección de citas famosas - Colección de firmas - ¿Cómo determinar si ftp está actualmente en modo activo o pasivo?

¿Cómo determinar si ftp está actualmente en modo activo o pasivo?

FTP sólo se conecta a través de TCP, no hay ningún componente UDP de FTP. FTP se diferencia de otros servicios en que utiliza dos puertos, un puerto de datos y un puerto de comando (o puerto de control). Normalmente, el puerto 21 es el puerto de comando y el puerto 20 es el puerto de datos. Al mezclar conceptos de modo activo/pasivo, es posible que el puerto de datos no sea 20.

FTP en modo activo:

En modo activo, el cliente FTP descarga datos desde cualquier puerto no dedicado (n > 1023) y se conecta al puerto de comando del servidor FTP, el puerto 21. Luego, el cliente escucha en el puerto N+1 (N+1 >:= 1024) para enviar mensajes y envía comandos al servidor FTP a través del puerto N+1 (N+1 >:= 1024). El servidor a su vez se conectará al puerto de datos especificado localmente por el usuario, como el puerto 20.

Basado en el firewall del lado del servidor, para admitir FTP en modo activo, debe abrir los siguientes puertos utilizados en la interacción:

L comando del servidor FTP (21) el puerto acepta cualquier puerto del cliente (conexión inicial del cliente).

L comando del servidor FTP (21) puerto al puerto del cliente (>1023) (el servidor responde al comando del cliente)

L datos del servidor FTP (20) puerto al puerto del cliente (>: 1023) (los datos de inicialización del servidor están conectados al puerto de datos del cliente)

L El puerto de datos del servidor FTP (20) acepta el paquete del puerto del cliente (>:1023) (el cliente envía ACK al puerto de datos del servidor) )

Como se muestra a continuación:

En el paso 1, el puerto de comando del cliente establece una conexión con el puerto de comando del servidor FTP y envía el comando "puerto 1027". Luego, en el paso 2, el servidor FTP devuelve un "ACK" al puerto de comando del cliente. En el paso 3, el servidor FTP inicia una conexión desde su propio puerto de datos (20) al puerto de datos previamente especificado (1027) del cliente y, finalmente, el cliente devuelve "ACK" al servidor en el paso 4.

El principal problema con el FTP activo en realidad radica en el lado del cliente. En realidad, el cliente FTP no establece una conexión con el puerto de datos del servidor. Simplemente le dice al servidor el número de puerto en el que está escuchando y luego el servidor se conecta nuevamente al puerto especificado por el cliente. Para el firewall del cliente, se trata de establecer una conexión desde el sistema externo al cliente interno, que normalmente está bloqueada.

Ejemplo de FTP activo:

El siguiente es un ejemplo de una sesión FTP activa. Por supuesto, se cambiaron el nombre del servidor, la dirección IP y el nombre de usuario. En este ejemplo, la sesión FTP se originó desde testbox1.slacksite.com (192.168.150.80), una estación de trabajo Linux que ejecuta el cliente de línea de comandos FTP estándar, hasta testbox2.slacksite.com (192.168.150.90), una estación de trabajo Linux que ejecuta ProFTPd 1.2. El texto rojo de la estación de trabajo Linux es información de depuración, que muestra el comando FTP real enviado al servidor y la información de respuesta generada. La información de salida del servidor se muestra en negro y la información de entrada del usuario se muestra en negrita.

Cuando consideramos esta conversación detenidamente, descubrimos algo interesante. Podemos ver que cuando se envía el comando PORT, especifica un puerto del cliente (192.168.438+050.80), no el del servidor. Cuando utilizamos FTP pasivo vemos el fenómeno contrario. Centrémonos en el formato del comando PORT. Como puede ver en el siguiente ejemplo, es una secuencia de seis números separados por comas. Los primeros cuatro dígitos representan la dirección IP y los dos últimos dígitos constituyen el número de puerto de la conexión de datos. Multiplique el quinto número por 256 y agregue el sexto número para obtener el número de puerto real. El número de puerto en el siguiente ejemplo es ((14*256)+178) = 3762. Podemos usar netstat para verificar la información de este puerto.

testbox 1:{/home/p-t/slacker/public _ html } % FTP -d testbox 2

Conéctate a testbox2.slacksite.com.

220 testbox2.slacksite.com El servidor FTP está listo.

Nombre (Cuadro de prueba 2: Lazy): Lazy

-& gt; Usuario Lazy

Lazy requiere 331 contraseña.

Contraseña: TmpPass

-& gt;Beyond XXXX

Inicio de sesión diferido de 230 usuarios.

-& gt;Método

215 Tipo UNIX: L8

El tipo de sistema remoto es UNIX.

Transfiere archivos usando modo binario.

ftp & gtLimit Switch

ftp: setsockopt (ignorado): Permiso denegado

-& gt;

El comando del puerto 200 fue exitoso.

->Directorio

150 Abre una conexión de datos en modo ASCII para una lista de archivos.

drwx - 3 usuario perezoso 104 07 27 01:45 public_html

226 transmisión completada.

ftp & gtgive up

-& gt;give up

221 Adiós.