Instalar chan_dongle en Isabel 4 con asterisk 11

Para los que no lo sepan Issabel PBX es el proyecto que continuo con el legado del extinto proyecto elastix, muchos colaboradores del anterior proyecto se sumaron en una nueva aventura y dieron forma a Issabel una solución PBX al mero estilo de Elastix: fácil de manejar e intuitiva en su configuración.

En este manual explicare como instalar chan_dongle para tener un Gateway GSM operativo al 100% en conjunto con Isabbel PBX, no entrare en tema en como instalar Issabel puesto que existen infinidad de manuales e internet para poder instalar Issabel, por lo cual, partiré que ya tienen Issabel PBX funcionando y con una sesión de root lista.

NOTA: A día de hoy Issabel PBX se encuentra en su version 47, que nos brinda la posibilidad de realizar la instalación con diversas versiones de asterisk, para este manual emplee la version 11 (como lo indica el título del manual).

issabel-pbx-4-chan_dongle
issabel-pbx-4-chan_dongle

Configurando e instalando chan_dongle en Issabel 4

Para comenzar con la instalación deberemos instalar algunas dependencias:

yum install git

Después dentro del directorio de /root/ (por practicidad) procederemos a clonar el repositorio de chan_dongle:

[root@issabel ~]# git clone https://github.com/wdoekes/asterisk-chan-dongle

Después empezaremos el proceso de compilación:

[root@issabel asterisk-chan-dongle]# ./bootstrap
configure.ac:6: installing './config.guess'
configure.ac:6: installing './config.sub'
configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'

Despues:

[root@issabel asterisk-chan-dongle]# ./configure --with-astversion=11.25.3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for strip... strip
checking for rm... rm
checking for library containing iconv... none required

Despues:

[root@issabel asterisk-chan-dongle]# make
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT app.o -MF .app.o.d -MP -o app.o -c app.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_command.o -MF .at_command.o.d -MP -o at_command.o -c at_comman
d.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_parse.o -MF .at_parse.o.d -MP -o at_parse.o -c at_parse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_queue.o -MF .at_queue.o.d -MP -o at_queue.o -c at_queue.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_read.o -MF .at_read.o.d -MP -o at_read.o -c at_read.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_response.o -MF .at_response.o.d -MP -o at_response.o -c at_res
ponse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT chan_dongle.o -MF .chan_dongle.o.d -MP -o chan_dongle.o -c chan_d
ongle.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT channel.o -MF .channel.o.d -MP -o channel.o -c channel.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT char_conv.o -MF .char_conv.o.d -MP -o char_conv.o -c char_conv.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cli.o -MF .cli.o.d -MP -o cli.o -c cli.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT helpers.o -MF .helpers.o.d -MP -o helpers.o -c helpers.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT manager.o -MF .manager.o.d -MP -o manager.o -c manager.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT memmem.o -MF .memmem.o.d -MP -o memmem.o -c memmem.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT ringbuffer.o -MF .ringbuffer.o.d -MP -o ringbuffer.o -c ringbuffe
r.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cpvt.o -MF .cpvt.o.d -MP -o cpvt.o -c cpvt.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT dc_config.o -MF .dc_config.o.d -MP -o dc_config.o -c dc_config.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT pdu.o -MF .pdu.o.d -MP -o pdu.o -c pdu.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT mixbuffer.o -MF .mixbuffer.o.d -MP -o mixbuffer.o -c mixbuffer.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT pdiscovery.o -MF .pdiscovery.o.d -MP -o pdiscovery.o -c pdiscover
y.c
gcc -shared -Xlinker -x -o chan_dongle.so app.o at_command.o at_parse.o at_queue.o at_read.o at_response.o chan_dongle.o channel.o char_conv.o cli.o helpers.o manager.o memmem.o ringbuffer.o cpvt.o dc_config.o pdu.o mixbuffer.o pdiscovery.o

Despues:

[root@issabel asterisk-chan-dongle]# make install
strip chan_dongle.so
/usr/bin/install -c -m 644 chan_dongle.so /usr/lib64/asterisk/modules

Después una vez generado el modulo, procederemos a copiarlo al directorio de asterisk:

cp /root/asterisk-chan-dongle/etc/dongle.conf /etc/asterisk/

Después ingresaremos a asterisk y cargaremos el modulo recién compilado:

asterisk –rv
Connected to Asterisk 11.25.3 currently running on issabel (pid = 9216)
issabel*CLI> module load chan_dongle.so
Loaded chan_dongle.so
== Parsing '/etc/asterisk/dongle.conf': Found
[2020-01-31 12:37:05] NOTICE[11486]: chan_dongle.c:1588 reload_config: [dongle0] Loaded device
== Registered channel type 'Dongle' (Huawei 3G Dongle Channel Driver)
== Registered application 'DongleStatus'
== Registered application 'DongleSendSMS'
== Registered application 'DongleSendUSSD'
== Manager registered action DongleShowDevices
== Manager registered action DongleSendUSSD
== Manager registered action DongleSendSMS
== Manager registered action DongleSendPDU
== Manager registered action DongleSetCCWA
== Manager registered action DongleReset
== Manager registered action DongleRestart
== Manager registered action DongleStop
== Manager registered action DongleStart
== Manager registered action DongleRemove
== Manager registered action DongleReload

En este instante, deberemos conectar nuestro modem y en “teoría” debería de funcionar pero resulta que nos arroja un error:

[dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:37:35] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:37:35] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory
issabel*CLI>
-- [dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:37:50] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:37:50] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory
-- [dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:38:05] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:38:05] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory

Esto hace alusión a que el dispositivo /dev/ttyUSBX no puede ser accedido por asterisk, esto es un tema de permisos por lo que debemos de cambiarle permisos al dispositivo, esto lo logramos con:

[root@issabel asterisk-chan-dongle]# chmod 777 /dev/ttyUSB*

Donde después volveremos a ingresar a asterisk y nos percataremos que ya está funcionando y operativo nuestro modem:

-- [dongle0] Dongle has connected, initializing...
-- [dongle0] Dongle initialized and ready
issabel*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 27 0 0 weex E153 11.609.18.00.00 861435000361846 334030882534042 Unknown
issabel*CLI>
issabel*CLI>

Configurar Isabel vía Web para llamar a travez de chan_dongle

Ahora una vez que está configurado y cargado el módulo de chan_dongle procedemos a acceder a la interface web de Issabel para poder ejecutar llamadas a través de nuestro nuevo gateway GSM.

Lo primero que haremos será generar una extensión, esto lo realizaremos (como en el viejo Elastix) dentro de:

PBX > Configuración PBX > Extensiones > Añadir una extensión > Dispositivo SIP genérico > Enviar

No voy a explicar cómo crear una extensión dentro de Issabel/Elastix porque es algo bastante documentado en internet, pero solo mencionare que es fundamental tener presente el usuario/número de extensión y el password generado o el secret (como lo nombra Issabel).

extension-Issabel-PBX
extension-Issabel-PBX

Para validar que nuestra extensión configurada se registró de manera correcta en nuestro PBX veremos un mensaje como el siguiente en la consola:

Registered SIP '1337' at 172.16.151.1:59107
> Saved useragent "Z 5.3.5 rv2.9.26-mod" for peer 1337
[2020-01-31 15:19:51] NOTICE[9341]: chan_sip.c:23892 handle_response_peerpoke: Peer '1337' is now Reachable. (1ms / 2000ms)

Una vez que tenemos registrada nuestra extensión generaremos una troncal, esto lo realizaremos en:

PBX > Configuración PBX > Básico > Troncales > Añadir línea troncal personalizada

troncal-GSM-Issabel
troncal-GSM-Issabel

Donde los datos importantes serán el nombre de la troncal (para temas de identificación/control) y la “Cadena de marcación peronalizada”, que como vemos en la imagen es:

dongle/dongle0/$OUTNUM$

Esto es de suma importancia para que salgan las llamadas.
Después de realizado esto procederemos a generar una “Ruta Saliente” esto lo podremos efectuar desde:
PBX > Configuración PBX > Básico > Rutas Salientes > Añadir ruta

ruta-de-salida-Issabel-GSM
ruta-de-salida-Issabel-GSM

Donde los datos más importantes serán: “Dial Patterns that will use this Route” que básicamente es la coincidencia en la marcación, en este caso emplee un “punto” que nos dice que todo lo que se marque saldrá por ahí, de igual forma, otro campo importante es “Trunk Sequence for Matched Routes” que es la ruta que empleara para sacar el tráfico, en la imagen aparece seleccionada la troncal chan_dongle porque es así como nombre la troncal personalizada en el paso anterior.

Una vez efectuados todos los pasos que se mencionaron anteriormente, en la consola de asterisk podremos observar la correcta salida de las llamadas cuando marcamos a un número cualquiera des nuestra extension: 5556581111 (una dependencia de gobierno aquí en MX).

-- Goto (macro-dialout-trunk,s,29)
-- Executing [s@macro-dialout-trunk:29] Set("SIP/1337-00000000", "the_num=5556581111") in new stack
-- Executing [s@macro-dialout-trunk:30] Dial("SIP/1337-00000000", "dongle/dongle0/5556581111,300,T") in new stack
-- Called dongle/dongle0/5556581111
-- Dongle/dongle0-0100000000 is making progress passing it to SIP/1337-00000000
> 0x7f0a1c03bfd0 -- Strict RTP switching source address to 172.16.151.1:8000
> 0x7f0a1c03bfd0 -- Strict RTP learning complete - Locking on source address 172.16.151.1:8000
-- Dongle/dongle0-0100000000 answered SIP/1337-00000000

De esta forma ya tendríamos configurado chan_dongle e Issabel y se encontrarían listos para sacar cualquier cantidad de tráfico que deseemos. Para cualquier duda o comentario puedes escribirlo en la sección de comentarios y con gusto responderé. O en su caso en la sección de contacto si tu duda es muy específica.

Chan_dongle en asterisk 13 y superiores

Hace algunos años escribi un post donde explique de una manera muy detallada como hacer funcionar chan_dongle en dupla con asterisk para poder tener un telular, que como vimos más tarde se podría hacer crecer para generar un Gateway GSM medianamente decente.

Gateway GSM con asterisk
Fuente : http://wiki.e1550.mobi

La información en su momento funcionaba puesto que por aquellos años (2014 aproximadamente) el lanzamiento de Asterisk 13 era relativamente reciente y esa versión en particular de asterisk no era que se empleara con regularidad (por ser muy fresca), ahora, algunos años después tras intentar efectuar una instalación me percate que dicho proyecto ya no era del todo funcional por una infinidad de errores de compilación que generaba.

Por lo cual, recientemente encontré un fork bastante funcional del proyecto original en Github que esta justamente pensado para versiones recientes de asterisk y los kernels modernos, por lo cual, proceso a compartir el nuevo procedimiento de instalación para dejar funcionando chan_dongle y asterisk de una manera óptima.

Yo particularmente lo probé en asterisk 16 por lo cual, para versiones anteriores no debería generar mayor problema, incluso para la versión 17 de asterisk (personalmente yo no la ocupo puesto que no es LTS), una vez que se tiene el contexto entremos en materia.

Manual para poder instalar chan_dongle en versiones recientes de Asterisk

Emplee una distribución basada en Debian (Raspbian) aunque esta manual aplica para sistemas hijos de este sistema como: Ubuntu, Linux Mint, Kali Linux, etc.

Antes de comenzar propiamente con la configuración de chan_dongle debemos instalar algunas dependencias necesarias para poder evitarnos futuros dolores de cabeza, sin más, procederemos a instalarlas:

apt install build-essential automake autoconf asterisk asterisk-dev

Una vez instaladas las dependencias estaremos listos para proceder a instalar chan_dongle.
Para ello nos dirigiremos al repositorio fork del proyecto original en Github y clonaremos el proyecto:

git clone https://github.com/wdoekes/asterisk-chan-dongle

O en el espejo que genere en mi sitio: Mirror Chan_dongle

Des pues nos dirigiremos dentro de la carpeta que nos generó git:

cd asterisk-chan-dongle

En este punto ya estaremos listos para poder compilar el software, pero antes de ello debemos de tener presente que versión de asterisk tenemos instalada con el siguiente comando:

asterisk -V
Asterisk 16.2.1~dfsg-1+deb10u1

Como apreciamos la versión que tenemos instalada es la 16.2.1
Ahora que tenemos la versión de asterisk instalada en nuestro sistema procedemos a efectuar la compilación de chan_dongle, ingresando el siguiente comando:

./bootstrap

Después de ello emplearemos la versión de asterisk que en su momento obtuvimos:

./configure --with-astversion=16.2.1

Y efectuara el proceso como se aprecia en la siguiente salida:

root@raspberrypi:~/asterisk-chan-dongle# ./configure --with-astversion=16.2.1
checking build system type... armv6l-unknown-linux-gnueabihf
checking host system type... armv6l-unknown-linux-gnueabihf
checking target system type... armv6l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for strip... strip
checking for rm... rm
checking for library containing iconv... none required
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes

Después del paso anterior procederemos a:

make

Y nos mostrara una salida similar a la siguiente:

root@raspberrypi:~/asterisk-chan-dongle# make
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT app.o -MF .app.o.d -MP  -o app.o -c app.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_command.o -MF .at_command.o.d -MP  -o at_command.o -c at_comman
d.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_parse.o -MF .at_parse.o.d -MP  -o at_parse.o -c at_parse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_queue.o -MF .at_queue.o.d -MP  -o at_queue.o -c at_queue.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_read.o -MF .at_read.o.d -MP  -o at_read.o -c at_read.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_response.o -MF .at_response.o.d -MP  -o at_response.o -c at_res
ponse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT chan_dongle.o -MF .chan_dongle.o.d -MP  -o chan_dongle.o -c chan_d
ongle.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT channel.o -MF .channel.o.d -MP  -o channel.o -c channel.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT char_conv.o -MF .char_conv.o.d -MP  -o char_conv.o -c char_conv.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cli.o -MF .cli.o.d -MP  -o cli.o -c cli.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT helpers.o -MF .helpers.o.d -MP  -o helpers.o -c helpers.c
helpers.c: In function ‘send_reset’:
helpers.c:158:111: warning: cast between incompatible function types from ‘int (*)(struct cpvt *)’ to ‘int (*)(struct cpvt *, const char *, const char *, unsigned int,  int,  void **)’ [-Wcast-function-type]

Una vez finalizado el proceso deberemos continuar con:

make install

Cuya salida será:

root@raspberrypi:~/asterisk-chan-dongle# make install
strip chan_dongle.so
/usr/bin/install -c -m 644 chan_dongle.so /usr/lib/asterisk/modules

A estas alturas del partido ya tendremos nuestro módulo de asterisk listo para hacer funcionar nuestro amado chan_dongle.


Pero antes de ello debemos tener presente que para que chan_dongle funcione requiere de un archivo de configuración, donde realizando una búsqueda del mismo nos percatamos que estará en:

/root/asterisk-chan-dongle/etc/dongle.conf

Como nos lo indico la búsqueda realizada:

root@raspberrypi:~/asterisk-chan-dongle# find / -name "*dongle.conf*"
/root/asterisk-chan-dongle/etc/dongle.conf

Ahora procederemos a copiar dicho archivo de configuración al directorio de asterisk por medio del siguiente comando:

cp /root/asterisk-chan-dongle/etc/dongle.conf /etc/asterisk/

En teoría ya tendríamos chan_dongle casi listo para funcionar pero antes de ello deberíamos conectar nuestro Modem usb Huawei (yo particularmente encuentro muy útil el Huawei E153) y validar que puerto se le asigno por medio del siguiente comando:

root@raspberrypi:/home/pi# dmesg | grep ttyUSB
[   20.588870] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB0
[   20.619440] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   20.632078] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   20.668550] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB3
[   20.697946] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB4
[   20.707379] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB5

Cabe mencionar que la asignación de los puertos es secuencial, por ejemplo, yo tengo 2 modems conectados donde cada modem recibe 3 puertos, es decir: al modem 1 le corresponde ttyUSB0, ttyUSB1,ttyUSB2 y al modem 2 le corresponde ttyUSB3, ttyUSB4 y ttyUSB5 respectivamente. Una vez que tengamos certeza de los puertos procedemos a validar dicha configuración en el archivo de configuración que anteriormente copiamos al directorio de asterisk:

cat /etc/asterisk/dongle.conf

Mostrando la siguiente salida:

; dongle required settings
[dongle0]
;audio=/dev/ttyUSB1		; tty port for audio connection; 	no default value
;data=/dev/ttyUSB2		; tty port for AT commands; 		no default value

Donde hasta al final nos percatamos que la sección de audio y data hacen referencia de manera correcta a los puertos del modem.
Ahora sí, una vez validados los requerimientos procederemos a cargar el modulo dentro de asterisk, ingresaremos en asterisk con:

asterisk -rv

Después ingresaremos el siguiente comando:

module load chan_dongle.so

Y al fin, tendremos nuestro chan dongle cargado como se aprecia en la salida del comando anterior:

raspberrypi*CLI> module load chand_dongle.so


raspberrypi*CLI> 
[Jan 15 20:58:32] NOTICE[2195]: chan_dongle.c:1588 reload_config: [dongle0] Loaded device
  == Registered channel type 'Dongle' (Huawei 3G Dongle Channel Driver)
  == Registered application 'DongleStatus'
  == Registered application 'DongleSendSMS'
  == Registered application 'DongleSendUSSD'
  == Manager registered action DongleShowDevices
  == Manager registered action DongleSendUSSD
  == Manager registered action DongleSendSMS
  == Manager registered action DongleSendPDU
  == Manager registered action DongleSetCCWA
  == Manager registered action DongleReset
  == Manager registered action DongleRestart

Por lo cual ya solo nos restara validar el estado de los modems con el siguiente comando:

raspberrypi*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number        
dongle0	     0     Free       25   0    0       weex           E153       11.609.18.00.00   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  Unknown       
dongle1      0     Free       27   0    0       weex           E153       11.609.18.00.00   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  Unknown

Ya tendremos listo y funcional chan_dongle para efectuar llamadas, el próximo paso solo será configurar el dial plan. 🙂

Para cualquier duda o comentario puedes escribirlo en la sección de comentarios y con gusto responderé. O en su caso en la sección de contacto si tu duda es muy específica.

Teniendo internet gratis de Infinitum en menos de 1 minuto

Recientemente me puse a navegar en la sección de wireless de elhacker.net y recordé momentos nostálgicos cuando me tenía que estar días con la laptop prendida para capturar paquetes IVS para poder romper redes y estar conectado al wifi del vecino.

En aquellos entonces se tenían que juntar poco más de medio millón de paquetes para romper la seguridad WEP (la más baja por cierto…), ahora con tan solo 10,000 he llegado a vulnerar algunos routers.

Pero eso no es todo, cada vez romper una contraseña wep es más fácil, como nos lo demuestra el software desarrollado por el GRAN EQUIPO de seguridadwireess.net denominado Stkeys que es capaz de romper una password wep en menos de 1 minuto.

Este software lo que hace es descifrar el algoritmo pre generado en los routers Thomson proporcionados aquí en México por Telmex, el algoritmo descifrado se basa en el ESSID (nombre que transmite la red Wifi).

internet-gratis

Si desean conocer los detalles del Software y la investigación pueden visitar el hilo en elhacker.net: http://foro.elhacker.net/hacking_wireless/routers_thomson_caso_espanol_redes_wepwpa_%93speedtouchxxxxxx%94_al_descubierto-t208312.0.html

¿Quién no se ha encontrado una red del tipo INFINITUMXXXXXX? Supongo que todos…

¿Entonces ahora imaginen romper su seguridad en menos de un minuto? Pues esto es posible, tan fácil como descargar el software de su mirror oficial.

Y una vez descomprimido ejecutarlo en nuestra consola:

internet-gratis-infinitum-telmex

Después de una vez generadas las “posibles” contraseñas, ya solo nos queda atinarle a ver si nos genero una valida… Joder, creo que nos tardaremos mas en ingresar la contraseña que el tiempo en la que nos la genero el software.

Y de nuevo gracias a los CRACK’s de seguridadwireless.net que gracias a ellos incursione en el mundo del wifi.

Saludos!

Como eliminar la publicidad en internet y tener una navegación limpia

Recientemente me he percatado navegando en un ordenador ajeno que la publicidad en internet se ha vuelto un poco molesta por no decir intrusiva… Y es que, grandes páginas que reciben grandes cantidades de tráfico implementan banners publicitarios de forma indiscriminada para obtener grandes sumas de dinero a coste de la navegación de sus usuarios, como se nota a continuación:

publicidad-molesta-en-internet

Donde el admin inserto publicidad entre cada comentario del foro, muchos me dirán: “Es su página, puede hacer lo que quiera” en efecto puede hacer lo que quiera… pero nosotros también 🙂

Por eso les voy a contar un pequeño truco para navegar de una forma limpia y sin publicidad alguna. Esto es posible utilizando el navegador llamado Firefox y un addon llamado NoScript que como su nombre lo indica “anula” los scripts ajeos a la pagina o en su caso los de la pagina misma. En general este plugin es más enfocado a la seguridad web, pero pueden emplearlo para tener una navegación limpia en internet.

navegador-firefox-sin-publicidadnoscript-plugin  

A continuación les muestro la “famosa” pagina de Taringa SIN PUBLICIDAD gracias a este magnífico Plugin para Firefox.

taringa-sin-publicidad

Saludos!

USBWebServer un Servidor Web portable PHP+MYSQL+APACHE

A veces cuando busco algun software en lo personal  me gusta que sea una aplicacion rapida, efectiva y que cumpla la funcion que nesecito.

En alguna ocasion  nesecite un servidor web que incluyera Apache, PHP y MySQL el servidor web preferido por muchos geeks, pero nesecitaba una version portable asi que en mi busqueda encontre un software llamado USBWebserver .

Este software es completamente freeware y cumple todo lo que nesecitaba: PHP+MySQL+APACHE, lo mas destacado de este software es que es completamente configurable,  ya que se puede modificar a voluntad el archivo de configuracion de apache.

servidor-web-portable-1

La interfaz de configuracion es completamente amigable ya que al ejecutar el portable nos da varias opciones,  que van desde detener cada uno de los servicios hasta configurar los puertos del servidor web  como se ve en la siguiente imagen, ademas otra ventaja es que este mismo puede trabajarse en segundo plano a la hora de ser minimizado.

servidor-web-portable-2

Otra caracteristica muy util es que incluye phpmyadmin un gestor muy completo de bases de datos que nos facilita enormemente la vida, a continuacion una imagen de lo que digo:

Sin mas preambulos pueden visitar el sitio official del proyecto para mas detalles y descargar el servidor web portable.

Sitio del servidor web portable: www.usbwebserver.net