Obtener IP Pública con Python y el país al que pertenece



Quieres saber tu IP publica por medio de una aplicación de escritorio escrita e Python? Tal vez te interese saber a que país pertenece una IP publica! Bueno, el siguiente código que les traigo puede resultar muy útil y se pueden hacer grandes proyectos con una implementación mayor del mismo.

El código requiere la instalación de geoiplookup, un programa por consola del cual obtendremos el país de nuestra IP...(si no está instalado, el código te dará la opción de hacerlo)

Yo he pensado en eso y he querido compartirlo con todos los pythonianos del mundo.

> obtener la IP publica del sistema

Nombre del sistema

Nombre del usuario que ha iniciado sección en el sistema

En que país se encuentra ubicado dicho sistema...

son varias de las cosas que puedes gestionar con InfoSistema.py pero lo mas importante es "aprender". Saludos y aprovéchenlo de buena manera.


Código Python


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# InfoSistema.py

__licence__ = "GPL"

import os
import commands
import datetime

# DEPENDENCIAS = geoiplookup del paquete geoip-bin para saber el país por medio de la IP

# Módulo para obtener información del sistema operativo.
class InfoSistema():
    """Clase para obtener información del sistema operativo actual."""

    def GetIpPublica(self):
        """Obtiene la IP pública del sistema leyendo www.showmyip.com"""
        import re, urllib2
        s = urllib2.urlopen('http://www.showmyip.com').read()
        m = re.search('(?<=displaycopy).*', s)
        ip = m.group(0).replace("('", "").replace("');", "")
        return ip

    def GetUsuario(self):
        """Obtiene el nombre del usuario actual"""
        return os.getlogin()

    def GetNombreSistema(self):
        """Obtiene el nombre del sistema"""
        return os.name

    def GetSistema(self):
        """Obtiene detalles del sistema operativo"""
        return os.uname()

    def GetFecha(self):
        """Obtiene la fecha y hora actual del sistema"""
        return datetime.datetime.today()

    def GetPais(self, IP=None):
        """Obtiene el país asociado a la IP pública"""
        if IP is None:
            IP = self.GetIpPublica()
        pais = commands.getoutput("geoiplookup " + str(IP))
        if pais == "sh: geoiplookup: not found":
            print("geoiplookup no está instalado")
            resp = raw_input("¿Instalar geoiplookup? (s/n) ")
            if resp.lower() == "s":
                print("Instalando...")
                os.system("sudo apt-get install geoip-bin")
                pais = commands.getoutput("geoiplookup " + str(IP))
                return pais
            else:
                return None
        elif len(str(pais)) > 200:
            print("No se pudo obtener el país para la IP " + str(IP))
            return False
        else:
            return pais

if __name__ == "__main__":
    print(__blog__)
    print(__author__)
    print("......................................................")
    info = InfoSistema()
    funciones = {
        "1": "info.GetIpPublica()",
        "2": "info.GetUsuario()",
        "3": "info.GetNombreSistema()",
        "4": "info.GetSistema()",
        "5": "info.GetFecha()",
        "6": "info.GetPais()",
        "7": "exit()"
    }
    while True:
        print("Elija:")
        elegir = raw_input(
            "IP Pública: 1\nUsuario: 2\nNombre del Sistema: 3\nSistema: 4\n"
            "Fecha: 5\nPaís: 6\nSalir: 7\n"
        )
        f = funciones[elegir]
        exec "print(" + str(f) + ")"