martes, 18 de octubre de 2011

Server FTP en modem TC-65

En este post voy a compartir un poco mi poca experiencia en el campo de las telecomunicaciones donde he conseguido crear un server FTP con un modem Siemens TC-65  a base de configurarlo a través del UART picando tecla, es decir, instrucción por instrucción. Para esto necesitaremos abrir una sesion con el Hyperterminal (configurado: 115200 8-N-1) y el Fillezilla


Primero de todo, he hecho que mi propio PC actuase como cliente gracias al software Fillezilla. utilizando su pantalla de log he podido comprobar que todos los comandos se recibian perfectamente desde el server (el Modem).

Una vez instalado Fillezilla, comienzo a inicializar la conexion, esto es; tipo de conexion, numero de telefono, password... digamos que los datos de conexion de nuestra tarjeta SIM. Utilizando los comandos at^sics (connection setup) como sigue:


at^sics=1,contype,GPRS0
at^sics=1,alphabet,1
at^sics=1,authMode,PAP
at^sics=1,user,******* <<<Aqui el numero de telefono
at^sics=1,passwd,******** <<<Aqui el pasword
at^sics=1,apn,ibox.tim.it
at^sics=1,inactto,30

A continuación inicializamos el servicio para que el modem actue como server. El problema de este dispositivo es que no gestiona directamente un server FTP, por lo tanto hay que hacerlo configurando los distintos socket. La configuracion para esta comunicación será de tipo pasiva.

Socket de Datos:
at^siss=7,srvType,socket
at^siss=7,conId,1 --- El id corresponde a lo que configuramos antes
at^siss=7,address,"socktcp://listener:2040"  --creamoss un socket listener en el  puerto 2040
at^siso=7 --Abrimos el socket

Socket de Commandos:
at^siss=8,srvType,socket
at^siss=8,conId,1
at^siss=8,address,"socktcp://listener:80" -- socket de comandos puerto 80, normalmente es el 21
at^siso=8

at^siso? --- Nos permitira ver los distintos perfiles configurados
Ahora entra en juego el Fillezilla, al cual le tenemos que decir que se conecte a ftp://"nuestra ip" , puerto "80", el usuario y la contraseña no es necesario.

Nota Importante: Desactiva el Timeout del Fillezilla para meter las instrucciones tranquilamente.
Una vez hacemos esto, vemos un mensaje en el hyperterminal que nos pide conectarnos al perfil 8 desde el perfil 0 (^SIS 8,1,0) , por tanto, debemos decirle que aceptamos la conexion en el perfil 0, donde quedara establecida con todos sus parametros de estado.

at^siso=0 -- Si todo va bien, ya tenemos una conexion en el puerto de comando 80

Una vez establecida la conexion, debemos enviar el mensaje de Welcome "al Fillezilla" por el hyperterminal y el resto de parametros que nos va pidiendo.


at^SISW= 0, 11 --Indicamos el numero de bytes
220 - hola

Fillezilla: USER *******

at^SISW= 0, 17
331 - usuario OK

Fillezilla: PASS *******

at^SISW= 0, 13
230 - Logged

Fillezilla: SYST

at^sisw= 0,22
215 UNIX Tipo sistema

Fillezilla: FEAT

at^sisw= 0,18
211 SP NoFeatures

Fillezilla: PWD

at^sisw= 0,15
257 "/" creado

Fillezilla: TYPE I

at^sisw= 0,7
200 Ok

Fillezilla: PASV

at^sisw= 0,48
227 Entering Passive Mode (95,74,****,****,7,248)  --- Nota:  (7*256)+248=2040 (puerto elegido) !!Atencion a las comas!!

En este momento nos llega otra peticion de conexión, en este caso es el client (Fillezilla) que nos esta pidiendo conectarnos al puerto de datos. Debemos aceptarla igual que en el caso anterior, solo que ahora llega al perfil 1.

at^siso=1 --- Ahora estamos conectados tanto por puerto de comandos como de datos


Fillezilla: LIST

at^sisw= 0,24
150 Abriendo modo ASCII

Finalmente le hacemos creer que en nuestro server hay una lista compuesta por un solo archivo .*txt que se llama Acmemail, con un cierto tamaño y unos ciertos permisos como se muestra a continuacion.

at^sisw= 1,62
-rwx------ 1 user group              5 Oct 19 09:24 prova.txt

at^sisw= 0,19
226 Lista completa

at^sisw=1,0,1 --- Con este comando finalizamos el envio

Y esto es todo, en Fillezilla debe aparecer en el root del server un archivo llamado Acmemail.txt

Hasta aqui.... de momento...

2ª PARTE

Bueno, si os habeis armado de valor y habeis conseguido llegar hasta aqui !!Congratulation!! habeis terminado la primera parte. Pero... que pasa ahora? Quereis coger el archivo que le hemos dicho a Fillezilla que tenemos no?. Ok , pero esta vez lo vamos a hacer con un programita en LabVIEW (Adjunto tambien una lista de los comandos en .txt para quien no tenga LabVIEW) porque si te equivocas es un royo y tienes que volver a empezar, de esta manera lo hacemos todo perfectamente a la primera.


Sin embargo vamos a tener en cuenta lo siguiente con esta conexion antes de empezar para entender mejor:

1- Cuando pedimos un archivo al Fillezilla establece una segunda conexion FTP, con lo cual, necesitamos configurar otra comunicacion de datos y otra de comandos como ya habiamos hecho pero con numero de perfiles diferentes (Comandos - Perfil 2, Datos - Perfil 3) . (Yo no lo sé. ¿Debe ser asi en teoria?)

2- Si intento cerrar cualquier perfil de comunicacion de la forma que se define en la documentación, es decir por ejemplo en el caso del socket de datos en el perfil 1:
at^sisw=1,0,1 --- Flag de cierre activado
at^sisc=1 --- cierre definitivo
Me deja el perfil lleno con una, lo que yo llamo, conexion basura con ip 0.0.0.0 pero no me la deja limpia y por tanto la proxima vez que se requiere una comunicacion no se va a elegir el perfil 1 (como deberia ser, ya que esta cerrado correctamente "supuestamente") sino el perfil 2. Si alguien sabe como solucionar esto seria bastante util.

Una vez hemos terminado.... por fin... debemos de tener un precioso archivo de 6 bytes que diga "Hola! " en nuestro PC.


No hay comentarios:

Publicar un comentario