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

BG/BB: el modelo de CLV para compras en períodos discretos

Los dos artículos anteriores de la serie cubrieron BG/NBD, el modelo para negocios donde el…

1 día ago

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

6 días ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

1 semana ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

2 semanas ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

2 semanas ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

3 semanas ago

This website uses cookies.