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 pais por medio de la IP

#Modulo para Obtener informacion del sistama operativo.
class InfoSistema():
    """Clase para obtener informacion del sistema operativo actual."""
    def GetIpPublica(self):
        """Obtiene la ip publica del sistema, mediante una lectura a la pagina
        web www.showmyip.com extrayendo de ella la ip publica mostrada"""
        import re, urllib2
        s = urllib2.urlopen('http://www.showmyip.com').read()#obtenemos el fuente de la pagina
        #Con expresiones regulares se obtiene todo lo que venga despues del 'displaycopy'
        m = re.search('(?<=displaycopy).*', s) #Esta línea es un pedazo de JS que imprime en la página la IP
        ip = m.group(0)
        #Reemplazamos por nada los datos que no sirven
        ip = ip.replace("('", "")
        ip = ip.replace("');", "")
        return ip

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

    def GetSistema(self):
        """Obtiene una tupla con el nombre del sistema operativo, nombre del equipo, 
        version del nucleo fecha de lanzamiento, arquitectura"""
        sistema = os.uname()
        return sistema

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

    def GetPais(self, IP=None):
        """Obtiene el pais de la ip publica pasada como parametro por medio del programa en consola 'geoiplookp'
        Si no se especifica una IP como parametro, se usara la ip publica del sistema actual asiendo una llamada
        a la funcion interna self.GetIpPublica()"""
        if IP == None:
            IP = self.GetIpPublica()
        pais = commands.getoutput("geoiplookup "+str(IP))
        if pais == "sh: geoiplookup: not found":
            print("El programa geoiplookup para saber el pais por medio de la ip publica, no esta instalado")
            resp = raw_input("Instalar geoiplookup? s/n ") #Opcion para instalar geoiplookup
            if resp.lower() == "s":
                print("Instalando Espere....")
                os.system("sudo apt-get install geoip-bin") #Instalacion del programa geoiplookup
                pais = commands.getoutput("geoiplookup "+str(IP))
                return pais
            else:
                return None #si el programa geoiplookup no esta instalado se devolvera un valor None
        elif len(str(pais)) > 200:
            print("No se pudo obtener el pais para la IP "+str(IP))
            return False #Si no se puede obtener el pais de la direccion ip, se devolvera 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 Publica: 1 \nUsuario: 2 \nNombre del Sistema: 3 \nSistema: 4 \nFecha: 5 \nPais: 6 \nSalir: 7 \n")
        f = funciones[elegir]
        exec "print("+str(f)+")"