sábado, 8 de noviembre de 2008

Petición de duplicado de factura en Mi Vodafone

Desde hace varios días he estado intentando pedir unos duplicados de facturas desde Mi Vodafone, pero sin mucho éxito, ya que me aparecía un mensaje diciendo que las fechas eran incorrectas. Lo achaqué a algún fallo temporal de sus sistemas.

Esta tarde al ver que la cosa seguía igual me decidí a ver que es lo que estaba pasando. Pues procedí a usar el Tamper Data y lo que me encontré es que en la petición figuraba un campo "fechas" a "on", y no había ninguno otro que hiciera referencia a las fechas.

El formulario correspondiente a la selección del rango de fechas era:

y viendo su código:

<legend><span>¿Qué facturas necesitas?</span></legend>
<label for="r1"><input class="radioInput" name="fechas" id="r1" value="10/2008" checked="true" onclick="javascript:ocultarSelect(true);" type="radio">Última factura</label>
<label for="r2"><input class="radioInput" name="fechas" id="r2" value="10/2008;09/2008;08/2008" onclick="javascript:ocultarSelect(true);" type="radio">Tres últimas facturas</label>
<div class="duplicado">
<input name="fechas" class="radioInput" id="r3" onclick="javascript:ocultarSelect(false);" type="radio">
<label for="desde">Desde
<select disabled="disabled" id="desde">
<option value="09/2008">Septiembre 2008</option>
<option value="08/2008">Agosto 2008</option>
<option value="07/2008">Julio 2008</option>
<option value="06/2008">Junio 2008</option>
</select>
</label>
<label for="hasta">Hasta
<select disabled="disabled" id="hasta">
<option value="09/2008">Septiembre 2008</option>
<option value="08/2008">Agosto 2008</option>
<option value="07/2008">Julio 2008</option>
<option value="06/2008">Junio 2008</option>
</select>
</label>
</div>

se ve que los selectores "desde" y "hasta" realmente no tienen atributo name, por lo que no forman parte de los datos del formulario, siendo el único que aparece "fecha", pero solo en las opciones de última factura o tres últimas. En esta última se ve que el valor que le da fecha es "10/2008;09/2008;08/2008".

Una vez visto esto fue simplemente cambiar el valor de fecha de "on" a "10/2008;09/2008;08/2008;07/2008;06/2008" y la respuesta fue correcta. Ahora solo hay que esperar a ver si realmente, esta vez, me llegan las facturas.

El problema parece que debe ser de JavaScript, supongo que su código no estará preparado para Firefox. También cabe la posibilidad de que no quieran que la gente pida facturas más allá de las tres últimas.

Leer más…

viernes, 7 de noviembre de 2008

Instalación de OpenWrt en las Foneras

Para sacarle todo el provecho a las Foneras lo mejor es ponerle el firmware genérico en el que se basa Fon, que es el OpenWrt. Además están a punto de sacar la versión 8.09.

20090720 ADVERTENCIA: Las nuevas Foneras que están enviando (al menos la 2) parece que tienen el Reboot por red capado. Así que no se puede instalar el OpenWrt, al menos no como describo.

Acceso al RedBoot

Todas las Foneras vienen con el gestor de arranque RedBoot, que además se encarga del particionado de la flash y desde donde se puede flashear la memoria interna. El acceso al gestor se puede realizar o por puerto serie, o por red, siendo este último sistema el más como y es el que se va a comentar.

En los primeros modelos el acceso por red estaba capado por lo que era necesario acceder por puerto serie o utilizar algún fallo de seguridad para poder habilitarlo. Pero desde hace ya bastante tiempo todas vienen con el acceso por red totalmente funcional.

Preparacion de la fonera

Lo primero es conectar la fonera a la red, o directamente a un PC. Es indiferente que los cables sean cruzados o no, y en las Foneras con dos puertos se puede usar cualquiera de ellos.

Con lo que sí hay que tener cuidado es que la IP que utiliza para arrancar es la 192.168.1.1 que puede interferir con algún otro equipo que esté haciendo de puerta de enlace. Una posibilidad es una vez accedido al RedBoot cambiar esta IP por la 192.168.1.254 de forma que en el futuro no moleste al arrancar.

Preparacion del PC

TFTP

Desde el PC se necesita un servidor de tftp para transferir las imágenes a flashear. Desde Debian:

$ sudo aptitude install tftpd
$ sudo mkdir /srv/tftp
$ sudo chmod 1777 /srv/tftp # Permisos al estilo /tmp

Por si no estaba arrancado el demonio de inetd (si no se usa para otro servicio) lo lanzamos:

$ sudo /etc/init.d/openbsd-inetd restart

A la hora de descargar las imágenes de OpenWrt hay que tener en cuenta que la Fonera + y la 2.0 necesitan una versión moderna.

Kamikaze 7.09, es la última estable: Solo soporta fonera 1.x

http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-vmlinux.lzma
http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-root.squashfs

Kamikaze 8.09 RC1, es la preeliminar: Soporta todas #4213

http://downloads.openwrt.org/kamikaze/8.09_RC1/atheros/openwrt-atheros-vmlinux.lzma
http://downloads.openwrt.org/kamikaze/8.09_RC1/atheros/openwrt-atheros-root.squashfs

Snapshot: Soporta todas

http://downloads.openwrt.org/snapshots/atheros/openwrt-atheros-vmlinux.lzma
http://downloads.openwrt.org/snapshots/atheros/openwrt-atheros-root.squashfs

Yo estoy utilizando los snapshots hasta que salga la 8.09 definitiva:

$ cd /srv/tftp
$ wget http://downloads.openwrt.org/snapshots/atheros/openwrt-atheros-vmlinux.lzma
$ wget http://downloads.openwrt.org/snapshots/atheros/openwrt-atheros-root.squashfs

ACTUALIZACION 20090416: Ya hace tiempo que ha salido la 8.09:

$ cd /srv/tftp
$ wget http://downloads.openwrt.org/kamikaze/8.09/atheros/openwrt-atheros-vmlinux.lzma
$ wget http://downloads.openwrt.org/kamikaze/8.09/atheros/openwrt-atheros-root.squashfs

ACTUALIZACION 20090607: Acaba de salir la 8.09.1:

$ cd /srv/tftp
$ wget http://downloads.openwrt.org/kamikaze/8.09.1/atheros/openwrt-atheros-vmlinux.lzma
$ wget http://downloads.openwrt.org/kamikaze/8.09.1/atheros/openwrt-atheros-root.squashfs

Red

Para poder acceder al RedBoot de la fonera (192.168.1.1) es necesario tener una IP en la red 192.168.1.0/24, por lo que habrá que buscar alguna libre y añadirla:
$ sudo ip add add 192.168.1.2/24 dev eth0

Telnet

Para acceder al RedBoot hay que hacerlo en cuanto se enciende, teniendo en los últimos modelos solo un margen de 2 segundos. Para facilitar la tarea se puede utilizar arping:
$ sudo aptitude install iputils-arping

Además hay que configurar telnet para que pase a modo linea y permita enviar Ctrl+C:

$ echo -e "192.168.1.1\n\tmode line" >> ~/.telnetrc    # Si no se había configurado antes

o si se le ha cambiado la IP al redboot, cambiarla por la que sea.

Conexión

Con todo esto preparado, desde el PC, lanzamos el comando:

$ arping -qf 192.168.1.1; sleep 1; telnet 192.168.1.1 9000

y enchufamos la alimentación a la Fonera, y en cuanto se conecte el telnet pulsamos Ctrl+C:

Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
== Executing boot script in 0.210 seconds - enter ^C to abort
^C
RedBoot>

lo normal es que a la primera no salga y haya que probar varias veces.

Flasheo

Una vez que se ha accedido al RedBoot pasamos a flashear.

Primero configuramos el acceso al servidor tftp (la IP tiene que cambiarse a la del PC):

RedBoot> ip_address -h 192.168.1.2
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.2

y comprobamos que hay comunicación:

RedBoot> ping -h 192.168.1.2
Network PING - from 192.168.1.1 to 192.168.1.2
PING - received 10 of 10 expected

Reinciamos las particiones de la flash (10s):

RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Y cargamos el kernel desde el PC a memoria usando TFTP (según la version de OpenWrt que se use el nombre del archivo puede ser distinto):

RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x801003ff, assumed entry at 0x80040400

Y lo flasheamos (2m-5m):

RedBoot> fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
... Erase from 0xa8030000-0xa80f0000: ............
... Program from 0x80040400-0x80100400 at 0xa8030000: ............
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Cargamos la imagen del sistema de archivos (nombre dependiente de la versión de OpenWrt):

RedBoot> load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
Using default protocol (TFTP)
Raw file loaded 0x80040400-0x801c03ff, assumed entry at 0x80040400

Pero antes de flashearla necesitamos saber el espacio libre que queda en la flash:

RedBoot> fis free
0xA80F0000 .. 0xA87E0000

con lo que lanzamos desde el PC la línea:

$ echo -n "fis free? "; read FF; echo -n "0x"; echo "obase=16;ibase=16;-$FF" | sed -e "s/0x//g;s/\.\./+/" | bc
fis free? 0xA80F0000 .. 0xA87E0000
0x6F0000

e introducimos el resultado del fis free. Y el número resultante es la memoria libre.

Y ahora lo flasheamos, con el tamaño de la memoria libre obtenido anteriormente (4m-11m):

RedBoot> fis create -l !!!MEMORIALIBRE!!! rootfs
... Erase from 0xa80f0000-0xa87e0000: ...............................................................................................................
... Program from 0x80040400-0x801c0400 at 0xa80f0000: ........................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Por último en la Fonera+ y 2.0 han cambiando el script de arranque, por lo que habrá que modificarlo para que el sistema arranque bien. El que debería ser se ve con:

RedBoot> fconfig -l
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec

Boot script timeout (1000ms resolution): 2
Use BOOTP for network configuration: false
Gateway IP address: 0.0.0.0
Local IP address: 192.168.1.1
Local IP address mask: 255.255.255.0
Default server IP address: 0.0.0.0
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false

si no es así habrá que modificarlo con:

RedBoot> fconfig boot_script_data
boot_script_data:
.. fis load loader
.. exec
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>>
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

Y con esto ya está listo, solo queda resetear y cruzar los dedos:

RedBoot> reset

Acceso a OpenWrt

El accesso se realiza a través de la IP 192.168.1.1, primeramente por telnet. Hay que esperara un poco y en las Foneras con varios RJ-45 hay que conectar la red al puerto COMPUTER:
$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
=== IMPORTANT ============================
Use 'passwd' to set your login password
this will disable telnet and enable SSH
------------------------------------------


BusyBox v1.11.2 (2008-10-24 04:41:51 PDT) built-in shell (ash)
Enter 'help' for a list of built-in commands.

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (bleeding edge, r13042) -------------------
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
---------------------------------------------------
root@OpenWrt:/#

Tras lo que se le pone un password:

root@OpenWrt:/# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root
root@OpenWrt:/# exit

y ya se puede entrar por ssh (después de esperar un rato, mientras crea las identidades):

david@davix:~$ ssh root@192.168.1.1
root@192.168.1.1's password:

BusyBox v1.11.2 (2008-10-24 04:41:51 PDT) built-in shell (ash)
Enter 'help' for a list of built-in commands.

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (bleeding edge, r13042) -------------------
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
---------------------------------------------------
root@OpenWrt:~#

También puede resultar conveniente reconfigurar la IP que tiene el OpenWrt para lo cual hacemos:

root@OpenWrt:~# vi /etc/config/network

y configuramos los parámetros: ipaddr, gateway y dns del interfaz lan para poder acceder a Internet. Por ejemplo:

config interface lan
option type bridge
option ifname eth0
option proto static
option ipaddr 192.168.2.99
option netmask 255.255.255.0
option dns "80.58.61.250 80.58.61.254"
option gateway 192.168.2.1

Cuidado con fastidiarla aquí porque sin acceso hay que volver a flashear arrancar con el reset pulsado y ...

root@OpenWrt:~# /etc/init.d/network restart

Trasteando con el RedBoot

Además de los comandos utilizados para flashear existen otros interesantes. Basicamente RedBoot gestiona el particionado de la flash guardando para cada una: nombre, dirección en la flash, dirección para cargar en memoria y punto de entrada (estas dos últimas solo se usan en el fis load para el kernel). Se puede ver con el comando:

RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000
vmlinux.bin.l7 0xA8030000 0x80041000 0x000C0000 0x80041000
rootfs 0xA80F0000 0x80040400 0x006F0000 0x80040400
FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000
RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000

Se ve la primera partición que es la correspondiente al propio RedBoot, que se carga al encender la Fonera, también se ven las dos últimas en las que guarda la tabla de las partiones (que a su vez es lo que muestra fis list) y la partición de configuración del RedBoot.

Las otras dos particiones corresponden con el kernel y con el sistema de archivos. En el firmware original de Fon se incluye otra que es el espacio libre del sistema de archivos y que se monta superpuesto al original, de esta forma al pulsar el reset durante el arranque se borra esta partición y queda de fábrica. Con OpenWrt esto no está preparado para eso y lo que se hace es extender la partición del sistema de archivos a todos el espacio libre, por eso lo de las cuentas al flashear.

Los datos de configuración de RedBoot se pueden ver con:

RedBoot> fconfig -l
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec

Boot script timeout (1000ms resolution): 2
Use BOOTP for network configuration: false
Gateway IP address: 0.0.0.0
Local IP address: 192.168.1.1
Local IP address mask: 255.255.255.0
Default server IP address: 0.0.0.0
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false

Se puede ver el script de arranque, que consiste en cargar la particion del kernel en memoria y despues ejecutarlo. Si luego se ve el arranque del kernel es él el que una vez funcionando busca en la flash las particiones y carga la del sistema de archivos.

Tambien se puede ver otros parámetros como el tiempo de espera en el arranque, IP del RedBoot (cuidado con cambiarla que si no es accesible se pierde el acceso por red al RedBoot) y del servidor por defecto... Todos estos se pueden cambiar con el comando fconfig.

Desde el punto de vista hardward se puede ver:

RedBoot> version

RedBoot(tm) bootstrap and debug environment [ROMRAM]
OpenWrt certified release, version 1.1 - built 12:40:38, Sep 3 2007

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: FON 2202
RAM: 0x80000000-0x82000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.

que indica donde se tiene la memoria RAM y la FLASH. En este modelo, al ser una Fonera 2.0 se dispone de 32MB de RAM y los 8MB de flash, que la que tienen todas. Se puede ver que la memeria tiene partes ocupadas por el propio RedBoot, y que el espacio libre empieza en 0x80040290, que redondeando a 0x80041000 es el punto de entrada que se configuró en la imagen del kernel. Este último valor es el que está configurado en el alias %{FREEMEMLO}.

Si se quiere cambiar de forma fija la MAC se puede hacer con:

RedBoot> set -mac 00:18:84:ab:cd:ef
Chang Lan Mac address to : 00:18:84:ab:cd:ef
Chang Wlan Mac address to : 00:18:84:ab:cd:f0

se ve que para todos los puertos ethernet solo existe una MAC, lo cual puede ser problemático y la Wifi es la siguiente. También se puede cambiar el número de serie y una clave que no se que es.

Hay más comandos que se pueden consultar con "help" o mirando en la Guía de usuario de RedBoot.

Referencias:

Leer más…