En el día a día de un informático es habitual tener que consultar los datos de registro relacionados a una IP, como el propietario, contacto, organización, AS,… Para ello podemos consultar la web del Registro Regional de Internet o RIR que gestiona el direccionamiento al que pertenece la IP (ver listado completo pinchando aquí), o instalar y hacer uso del paquete Whois en la distribución que estemos utilizando.
Otra opción es desarrollar nuestra propia herramienta que se ajuste a lo que queremos obtener, sin necesidad de revisar las páginas web de todos los RIR ni instalar un paquete adicional en nuestro servidor. Si además creamos un comando de sistema para ejecutar este comando ajustaremos más aún esta herramienta a nuestras necesidades.
El objetivo de esta entrada es compartir una sencilla herramienta desarrollada dentro de un entorno virtual en Python 3, junto a la creación de un comando de sistema personalizado para automatizar su ejecución.
Tabla de contenidos
Instalación Python pip y vitualenv
Lo primero que haremos es instalar pip y a continuación el módulo de entornos virtuales para Python 3.
Centos 7
# Instalamos el repositorio EPEL sudo yum install epel-release # Instalamos Python 34 y el gestor de paquetes python-pip sudo yum install python34 python-pip # Actualizamos pip e instalamos los entornos virtuales pip install -U pip pip install -U virtualenv
Debian
# Actualizamos los repositorios sudo apt-get update # Instalamos pip para Python 3 sudo apt-get install build-essential libssl-dev libffi-dev python-dev sudo apt-get install python3-pip # Ahora los entornos virtuales sudo pip3 install virtualenv
Crear y activar entorno virtual
Nos ubicamos en el directorio en donde se ejecutará nuestra herramienta. Yo suelo trabajar en el directorio /usr/local/scripts, pero la decisión final la dejo a tu gusto teniendo en cuenta que hay que indicar este en el comando de sistema que crearemos más adelante.
mkdir -p /usr/local/scripts/ipwhois && cd /usr/local/scripts/ipwhois
Creamos el entorno virtual sobre el que se ejecutará nuestra herramienta, el cual lamaremos ipwhois_project.
python3 -m virtualenv ipwhois_project
Activamos el entorno virtual.
source ipwhois_project/bin/activate
El prompt cambia indicando que nos encontramos en el entorno virtual, y por tanto todo módulo de Python que instalemos solo se aplicará a este entorno creado.
(ipwhois_project) sergio@sergio-VirtualBox:/usr/local/scripts/ipwhois$
Librerías necesarias
Ahora instalamos las librerías necesarias para ejecutar nuestra herramienta.
sudo pip install IPy ipwhois pprint
Recuerda que estos módulos solo aplicarán en el entorno virtual que nos encontramos, nunca a la instalación global de Python. Esto quiere decir que una vez desactivemos el entorno virtual no podrán ser utilizados.
Código de la herramienta
A continuación os muestro el código de la herramienta, sin entrar en muchos detalles más que los comentarios que hay entre líneas.
Creamos el archivo que contrendá el código.
# Creamos el archivo para la herramienta touch ipWhois.py # Cambiamos los permisos para el archivo chmod 775 ipWhois.py # Editamos el archivo nano ipWhois.py
Y agregamos el código.
# WHOIS sobre IP # 5-11-19 # Sergio Bastian Rodriguez # https://blog.tiraquelibras.com/?p=714 # Importamos las librerias necesarias import sys, pprint from ipwhois import IPWhois from IPy import IP # Obtenemos el argumento indicado al ejecutar la herramienta ip = sys.argv[1] # Logica de la heramienta try: # Confirmamos si el argumento es una direccion IP ipType = IP(ip) # Confirmamos si la direccion IP es publica o no if ipType.iptype() == 'PUBLIC': # De ser publica obtenemos los datos del whois y los mostramos obj = IPWhois(ip) results = obj.lookup_whois() pprint.pprint(results) else: # De no ser publica lo indicamos en un mensaje de error raise Exception('The IP ' + ip + ' is not public.') except Exception as e: # Si el argumento no es una dirección IP valida, o no es publica, mostramos el mensaje con el error print('ERROR - The argument added is not correct.\n%s' % (str(e))) finally: # Para finalizar mostramos la información del creador de la herramienta print('\n***Herramienta desarrollada por:\n Tiraquelibras.com (https://blog.tiraquelibras.com/?p=714)***')
Si ejecutamos el comando consultando una IP u otra cosa, como por ejemplo un dominio, nos mostrará la información de la IP consultada o nos mostrará un error. Te invito a que lo pruebes para ver el resultado.
python ipWhois.py 85.152.18.44 python ipwhois.py tiraqueliras.com
Un ejemplo del resultado si consultamos la información referente a la IP de los DNS de Google:
# ipwhois 8.8.8.8 {'asn': '15169', 'asn_cidr': '8.8.8.0/24', 'asn_country_code': 'US', 'asn_date': '1992-12-01', 'asn_description': 'GOOGLE - Google LLC, US', 'asn_registry': 'arin', 'nets': [{'address': '100 CenturyLink Drive', 'cidr': '8.0.0.0/9', 'city': 'Monroe', 'country': 'US', 'created': '1992-12-01', 'description': 'Level 3 Parent, LLC', 'emails': ['ipaddressing@level3.com'], 'handle': 'NET-8-0-0-0-1', 'name': 'LVLT-ORG-8-8', 'postal_code': '71203', 'range': '8.0.0.0 - 8.127.255.255', 'state': 'LA', 'updated': '2018-04-23'}, {'address': '1600 Amphitheatre Parkway', 'cidr': '8.8.8.0/24', 'city': 'Mountain View', 'country': 'US', 'created': '2014-03-14', 'description': 'Google LLC', 'emails': ['network-abuse@google.com', 'arin-contact@google.com'], 'handle': 'NET-8-8-8-0-1', 'name': 'LVLT-GOGL-8-8-8', 'postal_code': '94043', 'range': None, 'state': 'CA', 'updated': '2014-03-14'}], 'nir': None, 'query': '8.8.8.8', 'raw': None, 'raw_referral': None, 'referral': None} ***Herramienta desarrollada por: Tiraquelibras.com (https://blog.tiraquelibras.com/?p=714)***
Comando de sistema personalizado
Creamos el archivo en donde agregaremos el código que ejecutará nuestra herramienta, activando y desactivando el entorno virtual automáticamente.
Primero creamos el archivo que ejecutará el programa.
# Creamos el archivo sudo touch /usr/bin/ipwhois # Cambiamos los permisos para que lo pueda ejecutar cualquier usuario sudo chmod 777 /usr/bin/ipwhois
Agregamos el código Bash al comando creado.
sudo nano /usr/bin/ipwhois
case $1 in -h | --help) echo -e "Whois of IP address.\nOnly one IP by command.\nipwhois [-h|--help]" ;; *) # Confirmamos si se indica un unico argumento. # De lo contrario se mostrara un error. if [ $# -ne 1 ]; then # De no cumplirse mostramos un error echo -e "More than one argument or none has been indicated. Please, add only one argument.\n" else # Si se cumple activamos el entorno virtual source /usr/local/scripts/ipwhois/ipwhois_project/bin/activate # Ejecutamos la herramienta con el argumento indicado python /usr/local/scripts/ipwhois/ipWhois.py $1 # Desactivamos el entorno virtual deactivate fi ;; esac
Para finalizar podemos ejecutar el nuevo comando para ver la ayuda de la siguiente forma.
# ipwhois --help Whois of IP address. Only one IP by command. ipwhois [-h|--help]
Ahora si consultamos una dirección IP se mostrará la información de su registro desde la propia línea de comandos CLI.
ipwhois 85.152.18.44 ipwhois tiraquelibras.com
Conclusión
Con unas pocas líneas de código podemos crear nuestras propias herramientas que se adapten mejor a las necesidades que buscamos.
Enlaces relacionados
Instalación virtualenv para Python3 en Debian aquí
Instalación virtualenv para Python3 en Centos 7 aquí
Módulo ipwhois para Python3 aquí
Módulo IPy para Python3 aquí