jueves, 8 de diciembre de 2016

Construyendo nuestro propio escáner de dispositivos conectados a Internet. Parte 2

Compartir este artículo:
Buenas a todos, en el post de hoy continuaremos construyendo nuestro escáner de dispositivos conectados a Internet.  Hoy, vamos a comenzar el código del analizador, el cual implementaremos con Python por practicidad, potencia y por la cantidad de información existente en Internet, lo cual os ayudará de cara a ampliar sus capacidades en el futuro, reutilizando módulos que ya se encuentren programados.

El desarrollo lo haré con Visual Studio Code, y el módulo PythonVSCode (https://github.com/DonJayamanne/pythonVSCode), que nos facilitará enormemente la revisión del código y la implementación:


Bien, una vez que tengáis vuestro IDE preferido para desarrollar, vamos a crearnos una carpeta para el proyecto, el cual hemos denominado (temporalmente y hasta que lo bauticemos), FluScan. A su vez, dentro crearemos un archivo al que nombraremos como FluScan.py y una subcarpeta, a la que llamaremos GeoIP. En esta carpeta almacenaremos las bases de datos de geolocalización que comentamos en el pasado post. Estas bases de datos las podremos obtener de numerosas fuentes. Sin duda, las mejores son de pago, pero como nuestro objetivo es meramente académico, me he decantado por unas bases de datos "Lite", que podremos descargarnos gratuitamente desde el siguiente sitio web:



Una vez descargadas, deberemos descomprimirlas en la carpeta que hemos creado antes. Ahora solo nos faltará llamarlas desde nuestro código.

Para poder interactuar con estas bases de datos, utilizaremos el módulo de Python, pygeoip:


Este módulo podréis instalarlo con pip:


Si habéis seguido todos los pasos, tendréis el siguiente esquema de archivos:


Y dentro de GeoIP:

¡Perfecto! Con todo ello, hoy veremos un sencillo ejemplo para geolocalizar una dirección IP. Para ello os comparto a continuación el siguiente código python:

import pygeoip

def geo(_file,_ip):
    geoDb = pygeoip.GeoIP(_file)
    print geoDb.record_by_addr(_ip)

def main(_ip):
    ''' You can download GeoIP databases from here: https://dev.maxmind.com/geoip/legacy/geolite '''
    geo('GeoIP/GeoLiteCity.dat', _ip)

if __name__ == "__main__":
    print 'FluScan, an IPv4 scanner. Created by http://www.flu-project.com\n'
    main('8.8.8.8')

El cual tras su ejecución nos dará el siguiente resultado:

administrator@administrator-MacBookPro:~/FluScan$ python FluScan.py
FluScan, an IPv4 scanner. Created by http://www.flu-project.com

{'city': u'Mountain View', 'region_code': u'CA', 'area_code': 650, 'time_zone': 'America/Los_Angeles', 'dma_code': 807, 'metro_code':
'San Francisco, CA', 'country_code3': 'USA', 'latitude': 37.385999999999996, 'postal_code': u'94035', 'longitude': -122.0838, 'country
_code': 'US', 'country_name': 'United States', 'continent': 'NA'}


Pygeoip nos da una gran potencia para jugar con los datos referentes al geoposicionamiento, y nos será de gran utilidad para dotar de nuevas funcionalidades a nuestro escáner, pero eso será para un próximo artículo.

Saludos!

2 comentarios:

  1. Que tal, antes que nada te felicito por este aporte!

    Por otra parte, seguí todos tus pasos, en este caso en Windows 10, sin embargo al ejecutar el el código de la aplicación FluScan.py me arroja errores en diferentes lineas del código.

    Error en Cmd de Windows 10: "IOError: [Errno 2] No such file or directory: 'GeoIP/GeoLiteCity.dat'"

    Saludos y espero puedas auxiliarme.

    ResponderEliminar