Servidor FTP en Termux con Python

Termux Icon


Crear un servidor FTP en Termux con Python

Termux es una aplicación para Android increible, y si tienes teclado y ratón puede utilizarse localmente de forma muy cómoda. Sin embargo, en muchas ocasiones es interesante acceder al dispositivo android de manera remota.

Por ejemplo, para editar tus script con Sublime Text en lugar de nano, o trasferir archivos entre móvil y PC sin tener que conectarlo mediante un cable usb.

En este artículo vamos a crear un servidor ftp en Termux mediante un script python para conectarnos al móvil desde un PC Windows utilizándo Filezilla Client.

Nos conectaremos a través de la red de área local (LAN), así que asegúrate de que tu PC y Smartphone están conectados a la misma red.


CREACIÓN DEL SERVIDOR FTP

Desde el terminal de Termux posicionate en el directorio $HOME: /data/data/com.termux/files/home

$HOME es el directorio por defecto si acabas de abrir el terminal, comprueba que estás ahí ejecutándo el comando pwd.

REQUISITOS:

Crea un archivo llamado ftpserver.py y ábrelo con el editor de texto nano:

$ pwd
/data/data/com.termux/files/home
$ touch ftpserver.py
$ nano ftpserver.py

Desde nano escribe el siguiente script:

import os, socket
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer


FTP_PORT = 8021
FTP_DIRECTORY = os.getcwd()

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
IP = s.getsockname()[0]
s.close()


print(f'DIRECCION: ftp://{IP}:{FTP_PORT}')
print(f'DIRECTORIO RAIZ: {FTP_DIRECTORY}')


authorizer = DummyAuthorizer()
authorizer.add_anonymous(FTP_DIRECTORY, perm='elradfmw')

handler = FTPHandler
handler.authorizer = authorizer
handler.banner = 'Termux FTP Server :D'
handler.passive_ports = range(50000, 55535)

address = ('', FTP_PORT)
server = FTPServer(address, handler)

server.max_cons = 256
server.max_cons_per_ip = 5

server.serve_forever()

Los detalles sobre el funcionamiento de este script están documentados en el artículo Módulo pyftpdlib.

Presiona Ctrl + O y ENTER para guardar los cambios. Sal del editor nano pulsando Ctrl + X.

En resumen, hemos creado un servidor ftp al que podemos acceder de forma anónima (sin indicar usuario y contraseña), y tenemos todos los pemisos sobre el sistema de archivos (podemos editar, modificar y eliminar todos los archivos). Puedes modificar ftpserver.py para definir usuarios y asignarles permisos. Todo esto está descrito en Módulo pyftpdlib.

Ahora puedes ejecutar el servidor de la siguiente forma:

python ftpserver.py

En este caso puedes detener el servidor pulsando Ctrl + C si quieres continuar usando el terminal.

Alternativamente puedes ejecutar el servidor en segundo plano para continuar utilizándo el terminal sin detener el servidor:

python ftpserver.py &

Si ejecutas el script mediante python ftpserver.py (en primer plano), en el terminal se imprimirá la dirección ip y el puerto de escucha del servidor ftp. En mi caso:

DIRECCION: ftp://192.168.1.99:8021
DIRECTORIO RAIZ: /data/data/com.termux/files/home

En ftpserver.py habíamos indicado FTP_PORT = 8021, ya que Android no permite utilizar el puerto 21 estándar para conexiones ftp.


CONEXIÓN AL SERVIDOR DESDE EL PC

Para conectarnos al servidor utilizaremos la aplicación gratuita Filezilla Client.

Una vez instalado el cliente Filezilla, en la esquina superior izquierda debes indicar la dirección ip y el puerto del servidor (los que se imprimieron al ejecutar ftpserver.py).

Los campos usuario y contraseña puedes dejarlos vacíos, ya que hemos configurado el servidor para conectarnos de forma anónima.

Filezilla Client - Conexión Rápida

Presiona el botón [Conexión rápida] y veŕas el árbol de directorios de Termux. Además, como instaste termux-setup-storage tienes acceso al almacenamiento del dispositivo.

Puedes subir y descargar los archivos en tu dispositivo android, y por supuesto puedes editarlos desde el ordenador cómodamente.