27 jun. 2010

Escaneado de redes inalámbricas con python desde Android

Revisando el API de ASE encuentro que hay una forma de escanear redes inalámbricas con python en Android.
La idea es escanear las redes inalámbricas existentes y luego guardar la información en un archivo y presentarla en pantalla del celular.

A continuación se presenta el código:

#Importar los módulos android y time
import android,time

#Creando el objeto droid de la clase Android
droid = android.Android()

#Escanear las redes inalámbricas existentes y guardar en la variable redeswifi
redeswifi = droid.wifiGetScanResults()

#Se crea un archivo de texto donde se almacenará la información de las redes
archivo = open('/sdcard/redes.txt','w')

#Se crea una lista vacía
lista = []

#La información de las redes inalámbricas se encuentra en el indice 1
# de una lista, este indice contiene otra lista y dentro hay un diccionario
for i in range(len(redeswifi[1])):
#Se espera 1 segundo por cada iteración
time.sleep(1)

#Se toma los valores del diccionario(ssid,frequency,capabilities,level)
essid = redeswifi[1][i]['ssid']
frecuencia = redeswifi[1][i]['frequency']
capacidad = redeswifi[1][i]['capabilities']
level = redeswifi[1][i]['level']

#Se prepara la información para ser presentada en pantalla y en archivo
infored = "Red inalambrica : %s, frecuencia: %s, señal: %s, cifrado:%s" \
%(essid,frecuencia,level,capacidad)

#Se presenta la información en la pantalla del celular y se guarda también
#en una lista
droid.makeToast(infored)
lista.append("%s\n" %infored)

#Se escribe en el archivo y se cierra el mismo
archivo.writelines(lista)
archivo.close()

A continuación se muestra el contenido del archivo generado en el script:

Red inalambrica : prueba, frecuencia: 2442, señal: -91, cifrado:
Red inalambrica : pasillo, frecuencia: 2422, señal: -93, cifrado:[WPA2-PSK-TKIP+CCMP]

3 comentarios:

Antonio Sandoval dijo...

Ernesto tengo un problema, espero me pueda ayudar. Cuando ejecuto el script me aparece un error en la linea 35, %(essid,frecuencia,level,capacidad):

UnicodeDecodeError :'ascii' codec can't decode byte 0xc3 in position 22: ordinal not in range(128)

ernesto dijo...

Voy a revisar, ya la librería de ASE cambio a SL4A.

ernesto dijo...

Acabo de probar el script desde android y funciona sin problemas.