domingo, 16 de agosto de 2020

Comunicación Módem a Módem

Una vez que tenía mi módem Everex Traveller 2400i preparado el siguiente paso era instalarlo en un ordenador con alguna ranura ISA libre, configurar otro módem en otro ordenador y realizar comunicaciones entre los dos módems a través de la línea telefónica para probar los sistemas que se usaban antes de internet y los sistemas que se pueden utilizar hoy día para conectar dos equipos sin necesidad de conectar a internet.

En los dos ordenadores usé Debian. El módem lo configuré para utilizar el puerto /dev/ttyS1. Con el comando setserial se puede ver como tiene la dirección 0x02f8, la IRQ 3 y 115200 baudios de velocidad máxima entre el módem y el ordenador. No hay que confundir esta velocidad con la velocidad entre módems. Al conectarse un módem a otro intentarán conectarse automáticamente a la mayor velocidad que les permitan los estándares de comunicación que compartan entre si. La comunicación con el puerto serie es binaria, con señales de dos niveles, por lo que la velocidad es de un bit/s por baudio. En la comunicación entre módems dependiendo del estándar usado cada baudio puede equivaler a más o menos bit/s.

# setserial -a /dev/ttyS1

/dev/ttyS1, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3
	Baud_base: 115200, close_delay: 50, divisor: 0
	closing_wait: 3000
	Flags: spd_normal skip_test

A continuación instalé el módem en un ordenador con nombre "servidor2". Para poder recibir conexiones podemos usar el programa mgetty indicándole el puerto serie a usar. Se puede indicar la ruta completa o solo el nombre. También le podemos pasar el parámetro -D para que solo utilice el dispositivo como módem de datos y no haga la inicialización del fax. Con el parámetro -s podemos fijar la velocidad.

# mgetty -D /dev/ttyS1

Este programa antes se ejecutaba a través del archivo /etc/inittab, ahora con el uso de systemd es necesario crear una "unidad" de este sistema. Con el parámetro Restart se le indica que cuando termine su ejecución se vuelva a ejecutar. Esto hace que cuando se termine una conexión el programa se vuelva a ejecutar para recibir otra conexión.

[Unit]
Description=mgetty
Documentation=man:mgetty(8)
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service

[Service]
Type=simple
ExecStart=/sbin/mgetty -D /dev/ttyS1
Restart=always
PIDFile=/run/mgetty.pid.ttyS1

[Install]
WantedBy=multi-user.target

El archivo lo podemos guardar en /lib/systemd/system/mgetty.service y hacer que se inicie automáticamente con el comando enable o iniciar y parar manualmente con los comandos start y stop.

# systemctl enable mgetty

En otro ordenador, un portátil, usé un móvil Nokia 6630 para hacer de módem y conectar a "servidor2". Mediante un cable con una conexión no estándar que se conecta en la parte de abajo del móvil y un conector USB para el portátil quedan conectados los dispositivos y en Linux aparece el módem como el puerto serie /dev/ttyACM0.




Con setserial se puede ver que el módem no emula ninguna UART conocida y que la máxima velocidad entre módem y ordenador es de 9600 baudios = 9600 b/s.

# setserial -a /dev/ttyACM0

/dev/ttyACM0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
	Baud_base: 9600, close_delay: 50, divisor: 0
	closing_wait: 3000
	Flags: spd_normal

Los dispositivos de puerto serie como /dev/ttyACM0 tienen como grupo dialout. Si queremos que un usuario distinto de root utilice el módem debemos añadirle a este grupo con el comando adduser o editando manualmente el archivo /etc/group

# ls -l /dev/ttyACM0 

crw-rw---- 1 root dialout 166, 0 ago 13 18:10 /dev/ttyACM0

# adduser usuario1 dialout

Añadiendo al usuario `usuario1' al grupo `dialout' ...
Añadiendo al usuario usuario1 al grupo dialout
Hecho.

# cat /etc/group | grep dialout

dialout:x:20:usuario1

Para interactuar con el módem debemos ejecutar un programa que nos permita la comunicación con el puerto serie como minicom. Es conveniente usar al menos la versión 2.7.90 que ahora se encuentra en Debian Unstable ya que tiene algunas mejoras y fallos corregidos respecto a la versión de Debian Stable.

Es posible que la primera vez que ejecutemos minicom no arranque por algún fallo en la configuración por defecto como por ejemplo no encontrar el dispositivo serie.

minicom: no se puede abrir /dev/modem: No existe el fichero o el directorio

Para reparar la configuración deberemos ejecutar minicom con el parámetro -s desde el usuario root.

# minicom -s

+-------------[configuración]--------------+
| Nombres de ficheros y rutas              |
| Protocolos de transferencia de ficheros  |
| Configuración del puerto serie           |
| Modem y marcado de número                |
| Pantalla y teclado                       |
| Guardar configuración como dfl           |
| Guardar configuración como..             |
| Salir                                    |
| Salir del Minicom                        |
+------------------------------------------+

Esto nos permitirá ir directamente a la configuración sin ejecutar el programa y podremos entrar en "Configuración del puerto serie", presionar la tecla "A" para modificar el "Dispositivo Serie" e indicar la ruta del puerto serie, en mi caso /dev/ttyACM0. Presionando la tecla E se puede modificar la velocidad de comunicación entre el módem y el ordenador en bits por segundo.

Junto a la velocidad se encuentra el texto 8N1 que indica la forma de comunicación: 8 bits de datos, ningún bit de chequeo de paridad y un bit para indicar el principio y el final de los datos. En total se transmiten 10 bits por cada 8 bits de datos a enviar. Esta es la forma más común de comunicación y normalmente no será necesario modificarla.

+-------------------------------------------------------------+
| A - Dispositivo Serie      : /dev/ttyACM0                   |
| B - Localización del Fichero de Bloqueo : /var/lock         |
| C - Programa de Acceso           :                          |
| D - Programa de Salida             :                        |
| E - Bps/Paridad/Bits             : 9600 8N1                 |
| F - Control de Flujo por Hardware: Sí                       |
| G - Control de Flujo por Software: No                       |
| H -     RS485 Enable      : No                              |
| I -   RS485 Rts On Send   : No                              |
| J -  RS485 Rts After Send : No                              |
| K -  RS485 Rx During Tx   : No                              |
| L -  RS485 Terminate Bus  : No                              |
| M - RS485 Delay Rts Before: 0                               |
| N - RS485 Delay Rts After : 0                               |
|                                                             |
|    ¿Qué configuración alterar?                              |
+-------------------------------------------------------------+

Una vez modificado un parámetro presionamos Enter para volver a la lista de parámetros y otra vez Enter para volver al inicio de la configuración. A continuación deberemos pulsar sobre "Guardar configuración como dfl" para guardar la configuración y sobre "Salir del Minicom" para salir del programa. La configuración por defecto se guarda en el archivo /etc/minicom/minirc.dfl.

A continuación ya podemos ejecutar minicom desde un usuario normal del grupo dialout. El programa tiene varias funciones a las que se puede acceder presionando Control-A, soltando estas teclas y a continuación presionando la tecla de la función. Con Control-A y Z veremos la lista. Para entrar en la configuración debemos pulsar Control-A y después O. La configuración del usuario se guarda en el archivo .minirc.dfl de su directorio "home".

# cat .minirc.dfl 

#Fichero generado automáticamente - Utilizar menú de configuración del minicom para alterar parámetros.
pu baudrate         9600
pu bits             8
pu parity           N
pu stopbits         1

Desde minicom podemos interactuar con el módem usando comandos Hayes. En principio solo será necesario utilizar el comando ATD, ATDP (marcación por pulsos) o ATDT (marcación por tonos) seguido del número de teléfono al que queremos llamar. Es posible que sea necesario utilizar otros comandos dependiendo del módem para su configuración e inicialización, para ello deberemos leer su documentación. Por razones de privacidad en los ejemplos del artículo el número de teléfono es sustituido por "XXXXXXXXX".

Al ejecutar el comando ATD el módem marcará el teléfono indicado y comenzará la comunicación con el otro ordenador. Al realizarse la conexión recibiremos del módem el comando CONNECT seguido de la velocidad de conexión, en este caso 9600 b/s. Aunque se muestre esta velocidad, como la velocidad máxima del otro módem es de 2400 b/s, esa será la máxima velocidad de la comunicación.

A continuación debemos presionar Enter y nos aparecerá un mensaje de bienvenida de "servidor2" mostrando el nombre de su sistema operativo, su puerto serie, la velocidad de conexión con su puerto serie y la velocidad de conexión entre módems, ambas en bits por segundo. Por último podremos escribir el usuario y contraseña. Después de comprobar la contraseña el ordenador remoto nos permitirá iniciar sesión como si conectáramos con SSH. La gran diferencia respecto a SSH es que esta comunicación no es cifrada y por tanto insegura, sería el equivalente a utilizar Telnet.

Bienvenido a minicom 2.7.90

OPCIONES: I18n                                                               
Compilado en Jul 26 2020, 10:44:57.                                          
Puerto /dev/ttyACM0, 18:25:24                                                
                                                                             
Presione CTRL-A Z para obtener ayuda sobre teclas especiales                 
                                                                             
ATDXXXXXXXXX                                                                
CONNECT 9600                                                                 
                                                                             
Debian GNU/Linux ttyS1 38400 (2400)                                          
                                                                             
servidor2 login: usuario1                                                        
Contraseña: 
Último inicio de sesión:mié ago 12 18:17:32 CEST 2020en ttyS1
Linux servidor2 4.19.0-10-686-pae #1 SMP Debian 4.19.132-1 (2020-07-24) i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuario1@servidor2:~$ ls /
bin   home            lib64       mnt   run   tmp      vmlinuz.old
boot  initrd.img      libx32      opt   sbin  usr
dev   initrd.img.old  lost+found  proc  srv   var
etc   lib             media       root  sys   vmlinuz
usuario1@servidor2:~$

Con minicom además de poder ejecutar comandos podremos enviar y recibir archivos utilizando los protocolos ZMODEM, YMODEM, XMODEM o Kermit. Para ello utiliza programas externos. En la configuración, en "Protocolos de transferencia de ficheros", se pueden ver y configurar los programas que se utilizan para el envío y recepción con cada protocolo.

+------------------------------------------------------------------------------+
|     Nombre            Programa               Nombre U/D Pantalla completa E/S|
|-A  zmodem     sz -vv -b                       Y    U    N       Y       Y    |
| B  ymodem     sb -vv                          Y    U    N       Y       Y    |
| C  xmodem     sx -vv                          Y    U    N       Y       N    |
| D  zmodem     rz -vv -b -E                    N    D    N       Y       Y    |
| E  ymodem     rb -vv                          N    D    N       Y       Y    |
| F  xmodem     rx -vv                          Y    D    N       Y       N    |
| G  kermit     kermit -i -l %l -b %b -s        Y    U    Y       N       N    |
| H  kermit     kermit -i -l %l -b %b -r        N    D    Y       N       N    |
| I  ascii      ascii-xfr -dsv                  Y    U    N       Y       N    |
| J    -                                                                       |
| K    -                                                                       |
| L    -                                                                       |
| M   Activar la cadena de descarga Zmodem... D                                |
| N  Utilizar ventana de selección de ficheros.. Sí                            |
| O  Preguntar por el directorio de descargas..... No                          |
|                                                                              |
|   ¿Qué opción cambiar? (ESPACIO para borrar)                                 |
+------------------------------------------------------------------------------+

Al instalar minicom se instala también el paquete lrzsz que contiene estos programas. En "servidor2" es también necesario instalar ese paquete. ZMODEM es el protocolo más moderno y el más fácil de usar con mgetty y minicom. Si presionamos las teclas Control-A y a continuación S nos pedirá que elijamos el protocolo a utilizar. Debemos eligir "zmodem". A continuación nos pedirá que elijamos los archivos a enviar.

+-[Subida]--+                                                                                                     
| zmodem    |                                                              
| ymodem    |                                                                                                     
| xmodem    |                                                              
| kermit    |                                                                                                     
| ascii     |                                                                    
+-----------+
+-----------[Selecciona uno o más ficheros para subir]------------+
|Directorio: /home/usuario1                                       |
| [Descargas]                                                     |
| [Documentos]                                                    |
| [Escritorio]                                                    |
| [Imágenes]                                                      |
| [Música]                                                        |
| [Plantillas]                                                    |
| [Público]                                                       |
| [Vídeos]                                                        |
| .ICEauthority                                                   |
| .Xauthority                                                     |
| .bash_history                                                   |
| .bash_logout                                                    |
| .bashrc                                                         |
|         ( Esc para salir, Espacio para marcar )                 |
+-----------------------------------------------------------------+

           [Ir]   [Previo [Mostra [Marcar [Desmar  [Ok]

Podemos elegir uno o varios archivos presionando la barra de espacio. Para entrar en un directorio es necesario presionar la barra de espacio dos veces. Para subir a un nivel superior se debe entrar en el directorio "..". Al pulsar [Ok] se envían los archivos seleccionados y se muestra el proceso de envío. Los archivos se guardan en el directorio actual de "servidor2". Al terminar la transferencia se puede ver que la velocidad de transmisión ha sido de 249 B/s = 1992 b/s, no muy lejos de la velocidad de 2400 b/s del módem más lento.

+--------[zmodem subida - Presione CTRL-C para salir]--------+                                  
|Sending: archivo-prueba                                     |                                  
|Bytes Sent:    3201864   BPS:249                            |                                  
|                                                            |                                  
|Transfer complete                                           |                                  
|                                                            |                                  
| LISTO: presione alguna tecla para continuar...             |                                  
|                                                            |                                  
+------------------------------------------------------------+

Para recibir archivos usando ZMODEM debemos usar el comando sz en "servidor2" indicándole el archivo a enviar. A continuación veremos el proceso de descarga. Para otros protocolos debemos usar su programa correspondiente. El archivo se guarda en el directorio desde el que hayamos ejecutado minicom o en el que tengamos configurado como directorio para las descargas.

# sz archivo-prueba
+--------[zmodem bajada - Presione CTRL-C para salir]--------+ 
|Receiving: archivo-prueba                                   | 
|Bytes received:   26264/  26264   BPS:236                   | 
|                                                            | 
|Transfer complete                                           | 
|                                                            | 
| LISTO: presione alguna tecla para continuar...             | 
|                                                            | 
+------------------------------------------------------------+ 

En lugar de iniciar sesión en un ordenador remoto, dos personas desde dos ordenadores distintos pueden ejecutar minicom para conectar entre ellas y utilizar otras opciones del programa. Para probar la comunicación minicom a minicom con "servidor2" es necesario parar mgetty para liberar el puerto serie. Se puede matar el proceso o usar el comando systemctl si se utiliza systemd para ejecutarlo.

# systemctl stop mgetty

A continuación se ejecuta minicom, se configura el puerto serie /dev/ttyS1, se sale del programa y se vuelve a ejecutar. Tanto la comunicación como el envío de archivos se pueden iniciar desde cualquiera de los dos ordenadores, yo lo hice desde el portátil hacia "servidor2".

En el portátil debemos ejecutar el comando ATD para llamar a "servidor2". En "servidor2" se recibirá un comando RING desde el módem indicando que se está recibiendo una llamada y deberemos ejecutar el comando ATA para aceptarla. Por último se recibe el comando CONNECT seguido de la velocidad, indicando que se ha realizado la comunicación a 2400 b/s.

Bienvenido a minicom 2.7.90

OPCIONES: I18n 
Compilado en Jul 26 2020, 10:44:57.
Puerto /dev/ttyS1, 17:03:36                                                                                
                                                                                                         
Presione CTRL-A Z para obtener ayuda sobre teclas especiales                                             
                                                                                                                                                                           
RING                                                                                                     
ATA                                                                                                      
CONNECT 2400

Después de realizarse la conexión podemos probar a enviar un archivo con otro protocolo, por ejemplo YMODEM. Debemos indicarle a minicom en "servidor2" que se prepare para recibir un archivo presionando Control-A y después R. Nos pedirá que elijamos el protocolo a usar, elegiremos "ymodem" y el programa se quedará en espera del archivo.

+-[Bajada]--+                                   
| zmodem    |                  
| ymodem    |                                   
| xmodem    |                                   
| kermit    |                                   
+-----------+
+--------[ymodem bajada - Presione CTRL-C para salir]--------+
|rb waiting to receive.                                      |
|                                                            |
|                                                            |
|                                                            |
|                                                            |
|                                                            |
|                                                            |
+------------------------------------------------------------+

En el portátil debemos realizar el mismo procedimiento de envío de archivo que al conectar con mgetty. El proceso de recepción se mostrará en "servidor2".

Estos son los sistemas básicos que es interesante conocer para saber un poco más sobre las comunicaciones serie entre módems, pero si queremos utilizar hoy día una conexión por línea telefónica lo más útil es realizar una conexión PPP (Point to Point Protocol) (Protocolo Punto a Punto) como las que se utilizaban para conectar a internet. Esto nos permitirá utilizar protocolos con cifrado como SSH o TLS.

Para usar estos protocolos será necesario emplear módems de mayor velocidad como mi Conceptronic 56ER2. El Conceptronic 56ER2 es un módem externo de 56 kb/s que se conecta al ordenador por un puerto serie.



En "servidor2", para no tener que cambiar la configuración de los programas, primero desinstalé el módem de 2400 b/s y después conecté el de 56 Kb/s al segundo puerto serie. A continuación se debe volver a activar mgetty e instalar el paquete ppp con el programa pppd. En el archivo /etc/ppp/options.ttyS1 es necesario configurar la dirección IP del servidor y la del cliente así como la máscara de red. Debemos elegir una red que no interfiera con nuestras redes locales.

192.168.10.1:192.168.10.2
netmask 255.255.255.0

En el archivo /etc/ppp/pap-secrets, en la línea que da acceso a todos los usuarios del sistema, debemos cambiar "hostname" por el nombre del ordenador, en este caso "servidor2".

*       servidor2       ""      *

En el portátil seguí utilizando el mismo móvil ya que no tengo otro más rápido. Los móviles más modernos que tengo no permiten usarlos como módem, al conectarlos por USB aparecen en el sistema operativo como un dispositivo de red por el que conectar a internet. Tampoco dispongo de otra línea telefónica fija donde conectar otro módem.

Para realizar la conexión PPP desde el portátil podemos usar el programa Wvdial. Para configurarlo debemos ejecutar el comando wvdialconf.

# wvdialconf 

Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

Modem Port Scan<*1>: S0   S1   S2   S3   
ttyACM0<*1>: ATQ0 V1 E1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 Z -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM0<*1>: Modem Identifier: ATI -- ATI
ttyACM0<*1>: Speed 4800: AT -- OK
ttyACM0<*1>: Modem Identifier: ATI -- Nokia
ttyACM0<*1>: Speed 9600: AT -- AT
ttyACM0<*1>: Speed 9600: AT -- OK
ttyACM0<*1>: Speed 19200: AT -- OK
ttyACM0<*1>: Speed 38400: AT -- Speed 38400: AT -- OK
ttyACM0<*1>: Speed 57600: AT -- OK
ttyACM0<*1>: Speed 115200: AT -- Speed 115200: AT -- OK
ttyACM0<*1>: Speed 230400: AT -- OK
ttyACM0<*1>: Speed 460800: AT -- Speed 460800: AT -- Speed 460800: AT -- OK
ttyACM0<*1>: Max speed is 460800; that should be safe.
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found an USB modem on /dev/ttyACM0.
/etc/wvdial.conf<Warn>: Can't open '/etc/wvdial.conf' for reading: No such file or directory
/etc/wvdial.conf<Warn>: ...starting with blank configuration.
Modem configuration written to /etc/wvdial.conf.
ttyACM0<Info>: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

El comando wvdialconf detecta las características del módem y crea el archivo de configuración /etc/wvdial.conf si este no existe con los parámetros de inicialización necesarios. Si ya existía el archivo lo modificará.

Luego debemos editarlo para poner el número de teléfono, el usuario y la contraseña. Es necesario activar la opción "Stupid Mode" para que inicie directamente la conexión PPP, de lo contrario intenta interpretar los mensajes de inicio de sesión de mgetty y falla la conexión.

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = XXXXXXXXX
ISDN = 0
Username = usuario1
Init1 = ATZ
Password = xxxxxxxxx
Modem = /dev/ttyACM0
Baud = 460800
Stupid Mode = yes

A continuación podemos ejecutar el programa wvdial y se realizará la conexión con "servidor2".

# wvdial

--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDTXXXXXXXXX
--> Waiting for carrier.
ATDTXXXXXXXXX
CONNECT 9600
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Thu Jul 23 19:01:28 2020
--> Pid of pppd: 3263
--> Using interface ppp0
--> local  IP address 192.168.10.2
--> remote IP address 192.168.10.1

Con la conexión establecida ya podemos usar cualquier protocolo sobre IP para conectar con "servidor2" usando la dirección 192.168.10.1. También sería posible hacer configuraciones más complejas en las que no solo fuera posible contactar con un servidor sino acceder a una o varias redes. La velocidad máxima de conexión está limitada por los 9600 b/s del móvil, que debe usar el estándar V.32. Para cerrar la conexión debemos terminar el programa wvdial con Control-C.

Si copiamos un archivo con scp veremos como la velocidad no es mucha pero es suficiente para subir o bajar algunos archivos de datos pequeños. Utilizando dos módems 56K la velocidad podría ser bastante mayor.

# scp archivo-prueba root@192.168.10.1:/tmp

archivo-prueba  71% 2224KB  20.0KB/s   00:44 ETA

La velocidad de 20 KiB/s = 20,48 KB/s mostrada por scp no es posible, debe estar calculada sobre datos almacenados temporalmente por el sistema TCP/IP del sistema operativo. La velocidad máxima que permite el módem de 56 Kb/s es de 7 KB/s sin tener en cuenta los datos usados por los protocolos de comunicación. La velocidad del móvil es de 9600 b/s = 1200 B/s = 1,2 KB/s.

Con el comando nload podemos comprobar como la media de subida de todo el tráfico es de aproximadamente 8,5 Kb/s = 1,063 KB/s, dentro de lo que permite el móvil. Esta parece una medida más real. También podemos ver como la comunicación es semiduplex/half-duplex según permite V.32 con dos hilos, cuando se envían datos no se reciben y viceversa.

El móvil también es posible conectarlo por bluetooth. Para ello el ordenador debe tener conexión bluetooth o se puede usar un adaptador USB como el Conceptronic CBT200U2.

Después de conectar el adaptador al portátil y activar la conexión bluetooth en el móvil debemos instalar en el portátil el paquete bluez con los programas necesarios para utilizar bluetooth en Linux. A continuación debemos buscar el móvil y hacer el emparejamiento usando el programa bluetoothctl.

# bluetoothctl

Agent registered

[bluetooth]# scan on

Discovery started
[CHG] Controller 00:80:5A:46:0E:5D Discovering: yes
[NEW] Device 00:13:FD:BF:B3:59 nokia6630

[bluetooth]# pair 00:13:FD:BF:B3:59

Attempting to pair with 00:13:FD:BF:B3:59
[CHG] Device 00:13:FD:BF:B3:59 Connected: yes
Request PIN code
[agent] Enter PIN code: 8734
[CHG] Device 00:13:FD:BF:B3:59 ServicesResolved: yes
[CHG] Device 00:13:FD:BF:B3:59 Paired: yes
Pairing successful

Con el comando scan on se hace una búsqueda de dispositivos y se muestra su dirección MAC y su nombre. Con el comando pair y la MAC del dispositivo se hace el emparejamiento. Para el emparejamiento debemos elegir un PIN que se nos pedirá en el móvil para realizar la autenticación.

Para saber los servicios que proveé el móvil podemos usar el comando sdptool. El servicio que nos interesa es "Dial-Up Networking". Desafortunadamente los móviles modernos que tengo ya no tienen este servicio, al igual que por USB ha sido sustituido por otro en el que el móvil se conecta al ordenador como un dispositivo de red con el que conectar a internet y no como un módem con el que poder llamar a cualquier teléfono.

# sdptool browse 00:13:FD:BF:B3:59

Browsing 00:13:FD:BF:B3:59 ...

Service Name: Dial-Up Networking
Service RecHandle: 0x10006
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 3
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100

Con el comando rfcomm, indicándole la dirección MAC y el canal (channel) mostrado por sdptool, se crea un puerto serie que podremos usar como módem. En el móvil recibiremos la petición de conexión que deberemos aceptar. El puerto serie está activo mientras está en ejecución rfcomm. Si lo ejecutamos en primer plano podremos cerrar la conexión presionando Control-C. Para poder seguir utilizando la consola podemos ejecutarlo en segundo plano. Si reiniciamos el equipo será necesario volver a ejecutarlo.

# rfcomm connect /dev/rfcomm0 00:13:FD:BF:B3:59 3

Connected /dev/rfcomm0 to 00:13:FD:BF:B3:59 on channel 3
Press CTRL-C for hangup

Para que wvdialconf lo detecte debemos hacer un enlace simbólico en /dev cuyo nombre comience por ttyS. Luego podemos utilizar /dev/rfcomm0.

# ln -s /dev/rfcomm0 /dev/ttySrfcomm0

A continuación movemos o eliminamos el archivo de configuración de wvdial y ejecutamos wvdialconf para configurar el dispositivo de igual forma que con el cable USB.

# mv /etc/wvdial.conf /etc/wvdial.conf.usb
# wvdialconf 

Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

Modem Port Scan<*1>: S0   S1   S2   S3   
WvModem<*1>: Cannot get information for serial port.
ttySrfcomm0<*1>: ATQ0 V1 E1 -- OK
ttySrfcomm0<*1>: ATQ0 V1 E1 Z -- OK
ttySrfcomm0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttySrfcomm0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttySrfcomm0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttySrfcomm0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttySrfcomm0<*1>: Modem Identifier: ATI -- Nokia
ttySrfcomm0<*1>: Speed 4800: AT -- OK
ttySrfcomm0<*1>: Speed 9600: AT -- OK
ttySrfcomm0<*1>: Speed 19200: AT -- OK
ttySrfcomm0<*1>: Speed 38400: AT -- OK
ttySrfcomm0<*1>: Speed 57600: AT -- OK
ttySrfcomm0<*1>: Speed 115200: AT -- OK
ttySrfcomm0<*1>: Speed 230400: AT -- OK
ttySrfcomm0<*1>: Speed 460800: AT -- OK
ttySrfcomm0<*1>: Max speed is 460800; that should be safe.
ttySrfcomm0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found a modem on /dev/ttySrfcomm0.
/etc/wvdial.conf<Warn>: Can't open '/etc/wvdial.conf' for reading: No such file or directory
/etc/wvdial.conf<Warn>: ...starting with blank configuration.
Modem configuration written to /etc/wvdial.conf.
ttySrfcomm0<Info>: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

Acto seguido editamos el archivo de configuración /etc/wvdial.conf para cambiar el dispositivo a /dev/rfcomm0 y añadir el teléfono, el nombre de usuario y la contraseña. Por probar otra cosa distinta que por USB, en lugar de configurarlo para conectar a "servidor2" lo configuré para conectar a internet con la conexión de Movistar.

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Username = movistar
Init1 = ATZ
Password = movistar
Modem = /dev/rfcomm0
Baud = 460800

Una vez configurado se puede conectar a internet ejecutando wvdial.

# wvdial

--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&} }*} } g}%~
--> Carrier detected.  Waiting for prompt.
~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&} }*} } g}%~
--> PPP negotiation detected.
--> Starting pppd at Wed Jul 29 02:16:15 2020
--> Pid of pppd: 7361
--> Using interface ppp0
--> local  IP address 10.151.150.136
--> remote IP address 10.6.6.6
--> primary   DNS address 80.58.61.250
--> secondary DNS address 80.58.61.254

Para cerrar la conexión con el móvil se puede usar la acción release de rfcomm o matar el proceso.

# rfcomm release 00:13:FD:BF:B3:59

Los parámetros de configuración de wvdial se pueden dividir en diferentes secciones Dialer y mezclarlos cuando queremos hacer una conexión. Por ejemplo podemos dividir las configuraciones en módems, puertos serie y sitios a conectar.

[Dialer nokia6630]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Baud = 460800

[Dialer usb]
Modem = /dev/ttyACM0

[Dialer bluetooth]
Modem = /dev/rfcomm0

[Dialer servidor2]
Phone = XXXXXXXXX
Username = usuario1
Password = xxxxxxxxx
Stupid Mode = yes

[Dialer movistar]
Phone = *99#
Username = movistar
Password = movistar

De esta forma por ejemplo podemos utilizar el móvil Nokia 6630 como módem, usando el cable USB, para conectar a "servidor2", con el siguiente comando:

# wvdial nokia6630 usb servidor2

Con esto ya tenemos los conocimientos necesarios para poder conectar ordenadores u otros dispositivos a través de líneas telefónicas sin necesidad de conectar a internet. También nos pueden servir para conectar dos ordenadores a través de sus puertos serie con un cable null módem. Para otros artículos me queda analizar la electrónica del modem Conceptronic 56ER2, profundizar en los comandos Hayes y utilizar algún software de BBS.

No hay comentarios:

Publicar un comentario