El nombre del articulo lo dice todo (Mapear las redes Wifi mientras
conduces con tu vehículo y escribir cruces en los sitios donde se detectan,
solo que en nuestro caso lo haremos marcando las coordenadas GPS donde se
detectan).
En el siguiente artículo se mostrará cómo realizar un mapa
de cobertura Wifi de una zona concreta. Para ello necesitamos:
- · Teléfono móvil con GPS
- · Kismet
- · Giskismet
- · Google earth
Lo primero que debemos hacer es instalar en el teléfono
móvil el software que levantará un servicio donde se transmiten las coordenadas
GPS.
En nuestro caso como disponemos de un Iphone lo haremos con el software
GPS 2 IP para Iphone disponible en el AppStore por 6.99 €.
En el
caso de disponer de un dispositivo Android podríamos hacerlo con el software
BlueNMEA disponible en el Market gratuitamente:
Como se observa en las imágenes anteriores ambas aplicaciones hacen lo mismo, levantar un servicio donde se retransmiten las coordenadas GPS utilizando el protocolo NMEA que es el protocolo universal para GPS.
Por otro lado lo que haremos será compartir la conexión de
internet por cable o Wifi es indiferente, ¿el objetivo? Poder llegar por ping y
obviamente tener accesible el puerto del servicio concreto, en nuestro caso con
el Iphone el puerto es 11123.
Una vez que tenemos compartida la conexión a internet vía
tethering y tenemos accesible el teléfono en una máquina Linux haremos:
telnet $(IP_IPHONE) PUERTO | tee /dev/ttys0
Con esto nos estamos conectando al servicio levantado por el
iphone y llevándonos a un fichero todas las coordenadas, además de mostrarse
por la salida en pantalla.
Una vez que hemos realizado esto ya tenemos un gps montado
en /dev/ttys0.
Procedemos ahora a configurar adecuadamente Kismet. Si no lo
habéis compilado a mano vosotros y utilizáis la backtrack podemos encontrar la configuración
en /usr/local/etc/kismet.conf. En caso contrario podemos buscarlo con find,
locate o similares.
En este fichero yo definiré que la interfaz origen de
captura siempre será mon0:
Por otro lado indicamos que el gsp es de tipo gpsd y que
esta en el /dev/ttys0:
Guardamos el fichero y por ultimo tenemos que ejecutar el
siguiente comando:
Gpsd –N –n –D 3 /dev/ttys0
Con esto le indicamos al demonio de gpsd donde tiene que coger
los datos del gps.
Posteriormente arrancamos la tarjeta Wifi en modo monitor
con:
Airmon-ng start $(nombre_interfaz)
Y arrancamos kismet. En el iphone activamos el gps y automáticamente
se estarán guardando las redes Wifi visibles por donde estés pasando.
Posteriormente con giskismet lo guardaremos todo en una base
de datos sqlite de la siguiente manera:
Giskismet –x $(fichero).netxml
Finalmente giskismet permite exportar todos los datos a un
fichero kml que será cargado con google
earth. La base de datos que crea giskismet tiene la siguiente estructura:
CREATE TABLE clients (
cid INTEGER PRIMARY KEY AUTOINCREMENT,
nid INTEGER NULL,
mac text default NULL,
manuf text default NULL,
iptype text default NULL,
ip text default NULL);
CREATE TABLE wireless (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
NetworkID INTEGER NULL,
NetType text default NULL,
ESSID text default NULL,
BSSID text default NULL,
Manuf text default NULL,
Info text default NULL,
Channel INTEGER NULL,
Cloaked text default NULL,
Encryption text default NULL,
Decrypted text default NULL,
MaxRate INTEGER NULL,
MaxSeenRate INTEGER NULL,
Beacon INTEGER NULL,
LLC INTEGER NULL,
Data INTEGER NULL,
Crypt INTEGER NULL,
Weak INTEGER NULL,
Total INTEGER NULL,
Carrier text default NULL,
Encoding text default NULL,
FirstTime text default NULL,
LastTime text default NULL,
BestQuality INTEGER NULL,
BestSignal INTEGER NULL,
BestNoise INTEGER NULL,
GPSMinLat float NULL,
GPSMinLon float NULL,
GPSMinAlt float NULL,
GPSMinSpd float NULL,
GPSMaxLat float NULL,
GPSMaxLon float NULL,
GPSMaxAlt float NULL,
GPSMaxSpd float NULL,
GPSBestLat float NULL,
GPSBestLon float NULL,
GPSBestAlt float NULL,
DataSize INTEGER NULL,
IPType text default NULL,
IP text default NULL);
cid INTEGER PRIMARY KEY AUTOINCREMENT,
nid INTEGER NULL,
mac text default NULL,
manuf text default NULL,
iptype text default NULL,
ip text default NULL);
CREATE TABLE wireless (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
NetworkID INTEGER NULL,
NetType text default NULL,
ESSID text default NULL,
BSSID text default NULL,
Manuf text default NULL,
Info text default NULL,
Channel INTEGER NULL,
Cloaked text default NULL,
Encryption text default NULL,
Decrypted text default NULL,
MaxRate INTEGER NULL,
MaxSeenRate INTEGER NULL,
Beacon INTEGER NULL,
LLC INTEGER NULL,
Data INTEGER NULL,
Crypt INTEGER NULL,
Weak INTEGER NULL,
Total INTEGER NULL,
Carrier text default NULL,
Encoding text default NULL,
FirstTime text default NULL,
LastTime text default NULL,
BestQuality INTEGER NULL,
BestSignal INTEGER NULL,
BestNoise INTEGER NULL,
GPSMinLat float NULL,
GPSMinLon float NULL,
GPSMinAlt float NULL,
GPSMinSpd float NULL,
GPSMaxLat float NULL,
GPSMaxLon float NULL,
GPSMaxAlt float NULL,
GPSMaxSpd float NULL,
GPSBestLat float NULL,
GPSBestLon float NULL,
GPSBestAlt float NULL,
DataSize INTEGER NULL,
IPType text default NULL,
IP text default NULL);
De esta manera podemos realizar consultas a la base de datos sqlite y guardarlas en un fichero kml:
perl giskismet -q "select * from wireless" -o ex1.kml
De esta manera se observan las redes según hemos ido
conduciendo donde las wifis se muestran como una diana de color:
- · Rojo --> No dispone de seguridad
- · Naranja --> Seguridad WEP
- · Amarillo --> Seguridad WPA
- · Verde --> Seguridad WPA2
Cuando intento leer con gpsd me da un I/O error. estas seguro que puedes usar tee y gpds en /dev/ttyS0 al mismo tiempo?
ResponderEliminar