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.