Como funciona BitTorrent( 1 ): los archivos *.torrent

El protocolo BitTorrent parece algo muy complejo, algo fuera del alcance de los simples mortales que programamos alguna cosilla de vez en cuando, pero no es así, el protocolo básico es bastante simple, se puede comprobar leyendo la wiki_de_theory.org o leyendo estos posts, la idea de esta mini serie es explicar como funciona el protocolo en 3 secciones:
* Como funcionan los archivos *.torrent
* Como comunicarse con el tracker
* Y como comunicarse con otros clientes

Así que empezamos con los archivos, para las pruebas utilizaremos el de trisquel

Haciendo un iterador a medida en Python

Mientras no van llegando cosas que requiren más tiempo aquí va algo que puede resultar interesante, vamos a hacer nuestro propio iterador dinámico, que permita modificar su comportamiento desde el propio script, por ejemplo, si hacemos: for i in my_iterator(1,1000,"<<1"):

print i

Mostraría esto:

===============================================================================

1 2 4 8 16 32 64 128 256 512

===============================================================================

La idea es bastante simple, necesitamos una clase que sirva de iterador, necesita 2 métodos [ tipos_-_iterador ]: iter(): que devuelve un iterador ( un objeto que tenga el siguiente método ), por pura pereza, en este ejemplo se devolverá a si mismo ( self ) next(): este es el método del iterador, muestra el siguiente valor o levanta StopIteration

Si vamos escribiendo la clase, el iter y init iría así: class my_iterator:

def iter(self):

return self

def init(self, init,end,expr):

self.nextVal=init

self.end =end

Como evitar que un hilo de pyGTK bloquee a los demás [ tip ]

Si alguien ha intentado programar un script que use pyGTK lanzándolo en un hilo aparte se habrá dado cuenta de que bloquea  a todo el proceso, lo que es bastante molesto. La solución es hacer esto desde ese hilo antes de levantar la interfaz: gtk.gdk.threads_init()

Hay más sobre hilos y pyGTK ( esto en concreto no ) en: http:// unpythonic.blogspot.com/2007/08/using-threads-in-pygtk.html

Saludos

Adivinando las contraseñas de la Wifi desde Android

Después de mucho pelearse con Netbeans y Eclipse, presento la primera aplicación para móviles de este blog :D, una que a partir de la SSID ( el nombre de la red ) y la BSSID puede en algunos casos "adivinar" la clave por defecto de la red:

La aplicación aún está en pañales, no he tenido la ocasión de probarla con redes reales, de ahí que exista la opción de introducir datos manualmente ( obviamente la forma normal de hacerlo es seleccionar la red en la lista que muestra ) , para realizar pruebas, y falta por implementar el algoritmo de las redes SpeedTouch ( aunque es bastante lento, ya que hay que hacer fuerza bruta contra SHA ).

Otra cosa que queda por acabar, es la lista de redes, por ahora se marcan las que se pueden adivinar con un "[o]" al final, o con la contraseña entre '[]' si se adivinó, además los datos sobre las redes adivinadas se guardan en una Base de Datos SQLite que está desaprovechada ( quizá se podría añadir la opción de guardar todo en un TXT para guardarlo ).

Descargando el manual 'La guía definitiva de PNG' con bash

Pues eso, hoy va a ser algo corto, el "problema" es simple, tenemos estos ingredientes: - Un manual sobre el formato PNG [ http://www.libpng.org/pub/png/book/toc.html ] - Una conexión a Internet intermitente, así que no es una posibilidad leerlo online - Pereza suficiente para no ponerse a descargarlo a mano - Ganas de trastear con bash

Y la receta, comentadita [ vacuum.sh ] o coloreado:

===============================================================================

!/usr/bin/env bash

nxt="$1"

base="$2"

Se comprueban los argumentos

if [ -z "$nxt" ] || [ -z "$base" ]; then

echo "$0 "

exit 0

fi

Mientras queden páginas

while [ ! -z "$nxt" ];do

# Se descarga

wget "$nxt"

# Se lee el nombre del archivo

for i in $(echo $nxt|sed "s/\// /g");do

   fname=$i

done

nxt=""

# Se lee el archivo en busca del link al siguiente

# ( la línea contiene align="right" y al principio está el <a href )

echo "Parsing..."

for o in $(cat $fname|sed "s/\ /%/g");do

Introducción a NetKit ( IV ): Un puente a Internet

Introducción_a_NetKit(III):switches_y_enrutado Introducción_a_NetKit(_II):creando_redes Introducción_a_Netkit(_I):_Instalación

Pues llegamos a la última parte de esta introducción a NetKit, donde simplemente veremos como hacer un laboratorio con una máquina que se conecte a el anfitrión ( y con ello a Internet ), queda como ejercicio para el lector añadir y configurar otras máquinas a la red que aprovechen esa conexión.

Lo único que hay que hacer es añadir una interfaz Point-To-Point, en el archivo "lab.conf": []=tap,, Nota: esto requiere permisos de root

Por ejemplo, si el laboratorio tiene una máquina llamada door, se añadiría esta línea para conectarse con la IP 10.1.1.2 al anfitrión, que recibiría la IP 10.1.1.1: door[0]=tap,10.1.1.1,10.1.1.2

Con esto ya se puede realizar una conexión con internet, para ser completamente usable habría que configurar DNS y tal, pero lo dicho, queda como ejercicio para el lector

Y hasta aquí esta serie, saludos

Compilando en entornos hostiles: Dia

No, no penseis nada raro, con "compilar en entornos hostiles" me refiero a hacerlo donde no tenemos a mano las librerías necesarias para compilar un programa en concreto, ni permisos para instalarlas, la idea es mostrar como se puede hacer para quien necesite usar algún programa cuando solo dispone de una cuenta con acceso mínimo.

Pero volvamos al principio, Dia es un software para hacer diagramas desarrollado por el proyecto Gnome, supongamos que quremos usarlo en una máquina, una opción sería descargar el paquete ya compilado y ejecutarlo, pero... sorpresa! , utiliza una librería que no esta instalada ( libxml2 en este caso) .

Entonces habrá que seleccionar un lugar donde se instalarán las  librerías y el programa ( no tiene que ser el mismo, pero por comodidad aquí sí lo será ), digamos que le llamamos myroot, entonces nos colocaremos en ese directorio, abrimos un terminal y haremos:

export myroot=pwd

Gráficos de tortuga sobre imágenes en Python

Pues hoy traigo una mini-libraría que se apoya en PIL para hacer gráficos de tortuga directamente sobre imágenes [ imgturtle.py ]: 

Dibujado con este script [  dragon.py ]

La idea es que se acerque lo máximo posible a la implementación oficial de los gráficos_de_tortuga_de_python con el añadido de poder guardar las imágenes ( y más velocidad me atrevería a decir ).

Al comenzar hay que crear un objeto imgturtle, que maneja la imágen, al inicializar el objeto se debe pasar un parámetro, una tupla de números que defina el tamaño en 'x' y en 'y' de la imágen o bien una cadena con el nombre del archivo del que se va a partir:

t = imgturtle( ( x, y ) ) # Nueva imágen

t = imgturtle( argv[ 1 ] ) # Imágen basada en otra

Una vez creado el objeto se puede disponer de los métodos habituales de estos gráficos:

imgturtle.clear( ): # Vuelve a la imágen original

imgturtle.reset( ): # Reinicia la tortuga

imgturtle.save( fname ): # Guarda la imágen

Introducción a NetKit( III ): switches y enrutado

Introducción_a_Netkit(I):Instalación
Introducción_a_NetKit(_II
):creando_redes
Introducción_a_NetKit
(IV):_Un_puente_a_Internet

Bueno, pues seguimos con esto, como dijimos la última vez, ahora lo que queremos es crear una red de 4 máquinas, dos switches conectados entre sí y cada uno a otra máquina, y que se puedan comunicar entre ellos sin problemas, el esquema en general sería este: 

No es tanto un problema con NetKit ya que se puede hacer con lo que ya sabemos, como un ejercicio sobre como hacer tablas de enrutado.

Lo primero es asignar decidir el número de conexiones que requiere cada máquina, así vemos que cada switch tiene dos conexiones, una con el otro switch y otra con la hoja, y cada hoja solo tiene una, con su switch correspondiente, podríamos entonces dividir la red en 3 dominios de colisión:

El archivo "lab.conf" quedaría entonces así:

===============================================================================

A un día de la 'Ley Sinde'

Mañana, día 9  de febrero se vuelve a votar la "Ley Sinde" en el Senado, después de no pocas protestas por parte de los cuidadanos. Aunque la ley fue rechazada en el congreso volvió al Senado después de un pacto entre el PSOE, PP y CiU. No tiene sentido otro post aquí cuando gente que sabe más del tema ya ha escrito sobre ello, en cualquier lugar que se dedique a las noticias se encontrará mucho material relacionado con el tema, pero ahí van links que me parecen recomendables:

http://xmailer.hacktivistas.net/ http://red-sostenible.net/

Solo me pregunto esto ¿ quién después de descargarse una canción dijo que es obra suya ?, ¿ no estarán confundiendo ( ¿ a propósito ? ) derechos de autor y derechos de explotación ?, ¿ no se estarán utilizando a los artistas como escudo ?

Saludos y suerte...

Newer posts Older posts