Transformado ficheros GPS con AWK y SED. 1


En este articulo describo como he transformado un fichero generado por airodump-ng con las redes wifi identificadas geográficamente haciendo Wardriving. En un artículo posterior comentaré como se realiza Wardriving con Airodump-ng, como se representa en múltiples plataformas, el porqué de airodump-ng, el porqué de la necesidad de transformar los ficheros y como he definido las reglas de validación.

Para empezar comentar que nos encontramos con un fichero de traza que genera airodump-ng y que deberíamos transformar a un formato legible por otras aplicaciones que nos permitan representar los datos geográficamente como google-maps, google-earth, gpsdrive … Para ello vamos a recurrir a dos viejos conocidos:

  • SED:
    Es una herramienta que permite la modificación de ficheros de texto en función de expresiones regulares. Con esta herramienta realizaremos alguna sustitución de valores dentro del fichero que queremos tratar.

  • AWK:
    Es un lenguaje de programación diseñado para la modificación de ficheros de texto o flujos de datos. Con esta herramienta lo que haremos será extraer los datos que vamos a necesitar.

Partiremos del fichero que genera airodump-ng con extensión .kismet.csv y sobre él realizaremos las siguientes transformaciones:

  1. Eliminar los caracteres nulos [NUL, x00, ^@]. Algunas redes se registran con nombre nulo y no he conseguido tratarlo con AWK.

  2. La cabecera del fichero resultante debe ser: “name, desc, lat, lon” .

  3. El campo name lo llenaremos con los datos que ocupen las posiciones 3 y 4 en elfichero origen.

  4. El campo desc lo llenaremos con los datos que ocupan la posición 8.

  5. El campo lat lo llenaremos con las posiciones 25, 29 ó 33 por este orden con el primer valor no nulo.

  6. El campo lon lo llenaremos con las posiciones 26, 30 ó 34 or este orden con el primer valor no nulo.

  7. El separador de campos en el fichero origen es “;” y en el de destino será “,”.

  8. Algún campo tiene en su interior comas (“,”). Habrá que eliminarlas.

Para esto planteamos dos scripts. Uno con SED y otro con AWK.

SED. Eliminando los nulos.

sed ‘s/x00//g’ origen.kismet.csv > intermedio.kismet.csv

Con esto buscamos (‘s/) todos los caracteres nulos (x00) por nada (//) y continuamos a lo largo de todo el fichero (/g’).

El fichero de entrada es: origen.kismet.csv.

El fichero de salida es: intermedio.kismet.csv.

Lo único a tener en cuenta es que la “’” es la que corresponde al “{“ y no a la que corresponde a “?”. De esta forma la secuencia es ejecutable.

AWK. Todo lo demás.

awk -F “;” ‘

/ESSID/ {print “name, desc, lat, lon”}

/[0-9A-F][0-9A-F]:/{

gsub(/,/,” “)

{if ($25 == 0) $25=$29 }

{if ($25 == 0) $25=$33 }

{if ($26 == 0) $26=$30 }

{if ($26 == 0) $26=$34 }

{print $4 “-” $3 “,” $8 “,” $25 “,” $26}

}‘ <> destino.gps.csv

Con -F “;” le indicamos a AWK que “;” es el separador de campos.

Con /ESSID/ {print “name, desc, lat, lon”} buscamos la cadena “ESSID” localizamos la cabecera actual y cambiamos la línea con la cabecera deseada.

Con /[0-9A-F][0-9A-F]:/ buscamos las lineas que contengan el principio de una MAC, y sobre ellas realizaremos las siguientesoperaciones:

gsub(/,/,” “) : Cambiamos “,” por espacios en blanco.

{if ($25 == 0) $25=$29 } : Si la posición 25 tiene un 0, le pasamos el valor de la 29.

{if ($25 == 0) $25=$33 } : Si la posición 25 tiene un 0, le pasamos el valor de la 33.

{if ($26 == 0) $26=$30 } : Si la posición 26 tiene un 0, le pasamos el valor de la 30.

{if ($26 == 0) $26=$34 } : Si la posición 26 tiene un 0, le pasamos el valor de la 34.

{print $4 “-” $3 “,” $8 “,” $25 “,” $26} : Imprimimos la salida

Probablemente haya formas mas elegantes de hacerlo, pero esta me funciona y me permite hacer mis pruebecillas.

Documentación de referencia:

Compartir
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Una idea sobre “Transformado ficheros GPS con AWK y SED.