Tuesday, November 9, 2010

Usar HTC Desire como módem en Linux

Recientemente compré un HTC Desire. Aún estoy maravillado con las cosas que puedo hacer con este "smartphone". Es un teléfono super completo y eso de que tenga Android... ufffff lo máximo.

Para explotar todo el potencial de este tipo de teléfonos, hay que contratar un plan de datos de tarifa plana porque si no, la factura es descomunal.

Ok, pasando al tema en cuestión, mi proveedor de telefonía (Orange España al momento de escribir esto) permite utilizar el teléfono como modem para conectarse a internet y el HTC Desire viene con ese "modo" incluido de fábrica. Solo faltaba tratar de hacerlo funcionar en Linux ya que el manual solo se limita a hacerlo con el HTCSync.

Como era de esperarse, el HTCSync no viene para Linux, así que me puse a probar por mi cuenta.

Cuando conectas el HTC Desire a una computadora (yo lo hice en mi laptop) sale un mensaje proponiendo una serie de opciones:

  • Solo cargar el teléfono
  • Utilizarlo como un dispositivo de almacenamiento (acceso a la SD que trae)
  • Compartir conexión

La opción que nos interesa es la última, compartir conexión. Hay que tener en cuenta que el teléfono solo comaprte conexión cuando está habilitado el sistema 3G, es decir, cuando estamos conectados a la red de datos del proveedor de telefonía móvil. Si no está activado el modo 3G, sale un aviso recordándonos que debemos activar el 3G. Si le damos en "Aceptar", pasamos a la pantalla de configuración de conexiones inalámbricas. Desde aquí podemos activar el 3G.

Una vez activado el 3G, en el syslog de Linux saldrá un mensaje diciendo que hay una nueva interfaz usb (usb0 si no se tiene otra).

Con el comando ip addr show deberían salir todas las interfaces y entre ellas la usb0 con el flag de "DOWN". Simplemente debemos correr ifconfig usb0 up y verificar que ahora muestra el flag "UP".

Falta colocarle un IP, un default gateway y los servidores DNS. Afortunadamente, el teléfono tiene un servidor dhcp con lo que basta ejecutar:

dhclient usb0

y esperar a que tengamos IP, DNS's y default gateway.

Verificar con route -n que tenemos default gateway y ejecutar dig para ver si obtenemos respuesta.

En mi caso si la tuve. Eso es todo, ya estamos conectados a internet utilizando el HTC Desire.

Todo este procedimiento se puede automatizar escribiendo unas simples reglas de udev, pero eso queda a gusto del consumidor.

Espero que esto le sirva a alguien, agradecería sus comentarios.

Monday, September 13, 2010

Extraer cookies de Firefox 3 (en Linux)

El cuento es el siguiente, tengo una cuenta premium en rapidshare y hasta ahora me había funcionado perfectamente mi script para guardar cookies:

wget --save-cookies .cookies/rapidshare --post-data "login=el_login&password=el_password" --no-check-certificate -O - https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi > /dev/null

Pero como no todo puede ser fácil, los "amigos" de rapidshare decidieron cambiar la forma de hacer login en el sitio, de manera que ya no puedo guardar las cookies como antes.

Buscando por la red encontré un plugin de firefox para exportar cookies pero no quiero estarle instalando cosas a firefox, embasurándolo pués. También encontré scripts en python que hacen el trabajo pero me dió flojera usar python y tener que "entender" el script, así que decidí intentar sacar las cookies "a mano" yo mismo.

El archivo de cookies de firefox 3 es una base de datos sqlite que se encuentra (en Linux) en $HOME/.mozilla/firefox/cookies.sqlite.

En este archivo hay una tabla con el nombre moz_cookies con los siguientes campos:

id INTEGER PRIMARY KEY,
name TEXT,
value TEXT,
host TEXT,
path TEXT,
expiry INTEGER,
lastAccessed INTEGER,
isSecure INTEGER,
isHttpOnly INTEGER


Para bajarme la mayoría de las cosas de rapidshare uso wget con la opción --load-cookies. Wget espera un archivo de cookies con el siguiente formato:

.rapidshare.com TRUE / FALSE 1731510000 enc cadena


El formato es explicado aquí: http://kb.mozillazine.org/Cookies.txt

Cada uno de estos campos debe estar separado por un "TAB".

Para extraer esta información debemos hacer lo siguiente:

  • Entrar en la página deseada y autenticarse.

  • Verificar en el navegador que se tiene la cookie (depende del navegador... investiga!!!).

  • Copiar el archivo de cookies a un lugar "seguro" (/tmp por ejemplo).

  • Ejecutar lo siguiente (en Linux):

    $ sqlite3 cookies.sqlite
    sqlite> .separator \t
    sqlite> .output /tmp/cookies.txt
    sqlite> select host, "TRUE", path, "FALSE", expiry, name, value from moz_cookies where host = '.rapidshare.com' and name = 'enc';
    sqlite> .quit


    En /tmp deberíamos tener el archivo cookies.txt con los resultados separados por "tab".

    Con el comando:

    $ cat -vte /tmp/cookies.txt

    deberíamos observar el archivo de cookies con los valores seleccionados y con el caracter "^I" de separador.

  • Utilizar este archivo de cookies con wget.

Un solo detalle más, si se quiere alargar la fecha de expiración se puede sustituir el expiry en el por algo como expiry+3600*24*365, con lo que le estaríamos añadiendo un año a la fecha de expiración de la cookie.

Espero que esto sirva de ayuda.