Mostrando entradas con la etiqueta openwrt. Mostrar todas las entradas
Mostrando entradas con la etiqueta openwrt. Mostrar todas las entradas

Sobrevivir sin las X - wavemon

· wavemon












Wavemon es un monitor para dispositivos wireless basado en ncurses. Es un proyecto abandonado desde 2003 (por desgracia, pues, que yo sepa, no hay ningún otro proyecto alternativo) aunque aun se puede descargar la última versión (0.4.0b) y probar a compilarla, o instalarlo del apt o similar si aún está en los repositorios.
Nos permite monitorizar la calidad de un enlace, los niveles de señal y ruido de una señal, mac y modo de la tarjeta que usamos, frecuencia, mac del AP... Es de gran utilidad a la hora de orientar una antena direccionable, pues nos permite ver en tiempo real los cambios en la calidad de señal según modifiquemos la orientación de la antena.







El manejo es simple: se indica en el momento de lanzar el programa qué interface va a usar ( wavemon -i rausb0 >) o bien se incluye una linea en ~/.wavemonrc ( interface= rausb0 ). Si el dispositivo se asocia a una red ya nos muestra los detalles de señal etc, si no, nos asociamos previamente y lanzamos despues el programa.
Con las teclas de función accedemos a las distintas pantallas:

F1 Muestra la pantalla principal, con barras de progreso que indican
la calidad de señal, nivel de ruido, nivel se señal, estadísticas
(RX, TX), modo, punto de acceso, bitrate, encriptación, nuestro interface,
nuestra MAC, address, netmask y bcast.
F2 Muestra un histograma con el nivel de señal, nivel de ruido y relación
señal/ruido de la conexión.
F3 Muestra la Mac de los AP's detectados ( ademas del nivel de señal, nivel de
ruido y la calidad de enlace )
F7 Es una pantalla de configuración donde podemos modificar parámetros como
interface, tiempo de actualización de estadísticas, etc.
F8 Ayuda. Viene sin implementar.
F9 About
F10 Quit. Abandona el programa.


Encuentro particularmente útil este programa en la fonera cuando usamos antenas direccionales, así que lo compilé para usarlo dentro de este dispositivo. El binario está alojado aquí para la descarga.

Flashear la fonera (Chuleta)

Exáctamente igual que con kamikaze 7.09

Para entrar por telnet y que funcione ^C hay que crear un archivo ~/.telnetrc con el siguiente contenido:

192.168.1.1 9000
mode line

tal como está, respetando los espacios.
Lanzar el servidor tftp con los archivos openwrt-atheros-root.squashfs y openwrt-atheros-vmlinux.lzma en el directorio que corresponda según el tftp que usemos.
Una vez en el Redboot ejecutar los siguientes comandos:

fis init
ip_addr -h 192.168.1.100 -l 192.168.1.1/24
load -r -v -b 0x80041000 openwrt-atheros-root.squashfs
fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
fis load -l vmlinux.bin.l7
exec


Despues de exec pulsar Enter dos veces.

Entrar por telnet 192.168.1.1 23 , cambiar clave de root y la siguiente vez entraremos con el comando ssh root@192.168.1.1

Compilación cruzada (OpenWrt)

Descargo en primer lugar toda la rama de desarrollo del svn de OpenWrt:

~$ svn co https://svn.openwrt.org/openwrt/trunk/

Error validando el certificado del servidor de 'https://svn.openwrt.org:443':
- El certificado no fue emitido por una autoridad marcada como

( Bla, bla, bla... )

- "Huella": a1:0a:d8:2d:af:4e:67:92:18:a0:27:b6:9f:2b:e1:12:08:28:a0:b1
¿(R)echazar, aceptar (t)emporariamente o aceptar (p)ermanentemente? t

Se nos crea en el HOME un directorio trunk/ con todo el tinglado necesario para compilar .
Es necesario tener instalados los siguientes paquetes gcc, binutils, patch, bzip2, flex, bison,make, gettext, pkg-config, unzip, ibz-dev y libc headers para que no nos de error el
~/trunk$ make menuconfig donde podremos configurar el toolchain y el firmware:



Hago los cambios oportunos y salgo guardándolos.
Continúo con un interminable
~/trunk$ make
que descargará las fuentes, construirá las herramientas para la compilación cruzada y compilará el firmware.

:~/trunk$ make
++ mkdir -p /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ cd /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ mkdir -p bin lib include stamp
Checking 'bison'... ok.
make[1] world
make[2] tools/install

( Más bla, bla, bla )

make[2] package/rootfs-prepare
make[3] package/preconfig
make[2] target/install
make[3] -C target/linux install
make[3] -C target/sdk install
make[2] package/index


En ~/trunk/bin tendremos nuestro nuevo firmware con el que podremos flashear la fonera.

*Compilar programas

Preparo un script llamado sdk el cual al invocarlo con el menu ( uso pekwm como gestor de ventanas ) exporta la variable $PATH con la ruta hacia los binarios del compilador y la variable CC para que use el compilador de C para architectura MIPS.

export PATH=$PATH:/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/bin/
export CC=mips-linux-uclibc-gcc
cd /home/kir/trunk/package
TERM="xterm -fn fixed +sb -bg black -fg green -T sdk"
$TERM


Doy permiso de ejecución al script y lo guardo en un directorio en la ruta del PATH.

En ~/.pekwm/menu añado una entrada que llama a un xterm con los settings anteriores:
Entry = "SDK" { Actions = "Exec $TERM -iconic -e sdk &" }

* wavemon

Descargo las sources de wavemon con apt en /home/kir/trunk/package , aplico el parche http://kir.sdf-eu.org/wavemon_patch/ y hago un ./configure --host=mips-linux.
No da ningun error y ejecuto un make:
Ahora sí que da error, no encuentra ncurses.h
mips-linux-uclibc-gcc -O2 -Wall -c -o ui.o ui.c
ui.c:25:21: error: ncurses.h: No such file or directory

Creo que toca compilar ncurses.

$ cd build_dir/mips/ncurses-5.6/
./configure --host=mips-linux
make

Copio los archivos de ~/trunk/build_dir/mips/ncurses-5.6/lib
y ~/trunk/build_dir/mips/ncurses-5.6/include a ~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include
y bin/
respectivamente.Creo el enlace simbólico ncurses.h que apunta a curses.h y repito el make para wavemon.
Aparecen varios warning pero finalmente compila sin errores:
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 78695 2008-09-17 09:34 wavemon

A continuación "estripo" el binario para que ocupe menos:
mips-linux-strip wavemon
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 71280 2008-09-17 09:41 wavemon
.
Con strip el binario se redujo de 78965 a 71280 bytes.
Sólo queda pasarlo a la fonera con scp, wget o como nos venga en gana y disfrutarlo:

* Netdiscover

Descargo las fuentes de netdiscover con apt:
~/trunk/package$ apt-get source netdiscover
cd netdiscover-0.3beta6/
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux
.....
checking for pcap.h... no
configure: error: Cannot find pcap.h - You need libpcap installed.


Necesita libpcap, que ya está en
~/trunk$ cd build_dir/mips/libpcap-0.9.8/

En ~/trunk/build_dir/mips/libpcap-0.9.8/ipkg-install/usr tenemos los directorios include/ y lib/ . Copio su contenido a ~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include y lib/ como anteriormente y repito el .configure
./configure --host=mips-linux

checking for libnet.h... no
configure: error: Cannot find libnet.h - You need libnet installed.


Bien, ya tragó con libpcap pero se atraganta con libnet, así que lo descargo.
~/trunk/package$ wget http://downloads.openwrt.org/sources/libnet.tar.gz
~/trunk/package$ tar zxvf libnet.tar.gz
~/trunk/package$ cd libnet/

El configure no da problemas pero make muestra un error:
In file included from libnet_asn1.c:60:
../include/libnet.h:117:10: error: macro names must be identifiers

Edito la línea que es un #define 1 y la cambio a #define LIBNET_BIG_ENDIAN 1
A continuación ejecuto el make sin ningún error (aunque da varios warnings) pero no me aparece ningun directorio con las librerias.
Cambio la estrategia e instalo otra versión desde el mismo ftp de OpenWrt: wget http://downloads.openwrt.org/sources/libnet-1.0.2a.tar.gz

Descomprimo, cambio al directorio, bla, bla, bla... y no funciona.

Nuevo intento descargando libnet con apt
~/trunk/package$ apt-get source libnet1
...
In file included from libnet_asn1.c:60:
../include/libnet.h:117:10: error: macro names must be identifiers

Ya empezamos ...
Edito y añado LIBNET_BIG_ENDIAN a la linea del #define 1 (#define LIBNET_BIG_ENDIAN 1) y voilà que compila el jodido!
Ahora toca copiar los archivos .h y las librerias como anteriormente.. y sigue sin ir la cosa.

Vuelvo a ejecutar el configure con la opción --prefix:
./configure --host=mips --prefix=/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/
make
make install


Compila y se instala sin errores; cambio al directorio de netdiscover y
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux

y....

checking libnet.h usability... yes
checking libnet.h presence... yes
checking for libnet.h... yes

~/trunk/package/netdiscover-0.3beta6$ make
O.K.
cd src
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 441081 2008-09-18 09:36 netdiscover
mips-linux-strip netdiscover
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 367388 2008-09-18 09:38 netdiscover


Parece ser que para usar nuevas librerías, hay que compilarlas usando la opción --prefix en el ./configure; así le indicamos el compilador dónde está el lib/ y el /include .

Los binarios están en http://kir.sdf-eu.org/kamikaze_808



Enlaces:
Documentación de Kamikaze
OpenWrt Programming
Build-root documentation
Compilación cruzada