Python

Obtener la IP local y pública en Python

Hace unos días publiqué una entrada en la explicaba los pasos para conseguir tanto la IP de nuestro ordenador en la red local como la pública con la que se accede a internet desde Matlab. Información que no se puede obtener directamente de las funciones estándar, pero es útil en múltiples ocasiones. Dado que en Python tampoco existe una función para obtener esta información, en esta ocasión voy a adaptar el código Matlab para poder obtener la IP local y pública en Python.

Obtener la IP local en Python

La IP local de un ordenador se puede obtener fácilmente en la línea de comandos. Aunque el comando para obtener esta información es diferente en Windows y los sistemas basados en UNIX (Linux y macOS). En el caso de Windows se puede obtener con escribiendo en la terminal

for /f "tokens=2 delims=[]" %a in ('ping -n 1 -4 "%computername%"') do @echo %a

mientras que en Linux y macOS el comando que se debe ejecutar sería

ifconfig | grep 'inet ' | grep -Fv 127.0.0.1 | awk '{print $2}'

En ambos casos la información se puede obtener usando la función getoutput() del módulo subprocess. Aunque es necesario identificar el sistema operativo sobre el que se está ejecutando el programa para seleccionar el comando adecuado. Para esto, el método más fiable es usar la función system() del módulo platform que devuelve la cadena 'Windows' para los sistemas Windows, 'Darwin' en macOS y 'Linux' al trabajar en un sistema basado en Linux. Así, cuando esta función devuelve la cadena 'Windows' deberemos ejecutar el primer comando y en caso contrario el segundo. Por ejemplo, se puede usar el siguiente código.

import platform
import subprocess

if platform.system() == 'Windows':
    local = subprocess.getoutput("""for /f "tokens=2 delims=[]" %a in ('ping -n 1 -4 "%computername%"') do @echo %a""")
else:
    local = subprocess.getoutput("ifconfig | grep 'inet ' | grep -Fv 127.0.0.1 | awk '{print $2}'")

print(local)

Obtener la IP pública en Python

Para obtener la IP una de las mejores opciones es solicitar la información a un servicio, como puede ser el caso de http://checkip.amazonaws.com. Al acceder a esta web se obtiene una página que solamente con la IP. Por lo que solamente hay que llamar a la página. Algo que en Python se puede obtener con la función get del módulo requests. Por lo que solamente hay que ejecutar la siguiente línea para obtener la información.

import requests

requests.get('http://checkip.amazonaws.com').text.strip()

Función para obtener ambas IP

Todo lo visto en las secciones anteriores se puede unir en una función para conseguir la IP local y pública en Python de una manera más sencilla. Una posible implementación puede ser la que se muestra a continuación

import platform
import requests
import subprocess

def get_ip():
    """IP local y publica
    
    Este comando permite obtener tanto la IP local como la pública con la que se está accediendo a la red
    
    Returns
    -------
    ip : (string, string)
        Una tupla con loa IP local y pública
    """
    try:
        if platform.system() == 'Windows':
            local = subprocess.getoutput("""for /f "tokens=2 delims=[]" %a in ('ping -n 1 -4 "%computername%"') do @echo %a""")
        else:
            local = subprocess.getoutput("ifconfig | grep 'inet ' | grep -Fv 127.0.0.1 | awk '{print $2}'")
    except:
        public = 'unknown'
        
    try:
        public = requests.get('http://checkip.amazonaws.com').text.strip()
    except:
        public = 'unknown'
        
    return (local, public)

donde la función devuelve la información en una tupla.

Conclusiones

En esta entrada se han visto los pasos para obtener la IP local y pública en Python, creando además una función que se con la que obtener la información de una manera sencilla.

Imagen de Jorge Guillen en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Analytics Lane lanza ScoreFlow, un SaaS para construir y desplegar scorecards de crédito

En Analytics Lane seguimos evolucionando nuestras herramientas y damos un paso más con el lanzamiento…

3 días ago

DBSCAN y la selección de ε: teoría, intuición y aplicación práctica

Cuando hablamos de clustering, lo primero que viene a la mente suele ser k-means. Pero…

4 días ago

El bestiario de los indicadores económicos absurdos: El zoo patrio

Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…

1 semana ago

Por qué el banco te ofrece un 3% TAE y no es lo que parece

Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…

2 semanas ago

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

2 semanas ago

This website uses cookies.