Acceder a las IP local y pública con Matlab

Publicado el 05 octubre 2022 por Daniel Rodríguez @analyticslane

Actualmente no existe en Matlab una función con la que se pueda obtener la dirección IP del ordenador con el que se está trabajando. Aunque este es un dato que se puede obtener fácilmente del sistema operativo, la dirección en la red local, o servicios web, la dirección pública con la que se accede a internet. Veamos a continuación cómo se puede conseguir la IP local y pública con Matlab.

La IP local

Una de las formas más sencillas para conseguir la IP local del ordenador es usando los comandos del sistema operativo. Siendo necesario usar comandos diferentes en UNIX (Linux y macOS) y Windows.

Obtener la IP local en la terminal de UNIX

En primer lugar, se abordará un comando para obtener esta información en los sistemas tipo UNIX. La IP local es una información que se incluye en la salida del comando ipconfig, por lo que solamente hay que buscar el dato en esta. Para ello se deben seleccionar todas las líneas que contenga la cadena "inet ", incluyendo el espacio, y eliminar la que hace regencia a la dirección 127.0.0.1. La línea que queda contendrá la dirección IP después del primer espacio. Así, mediante el uso de tuberías la información se puede obtener escribiendo

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

Obtener la IP local mediante en Windows

Por otro lado, en Windows esta información se puede obtener a partir del la respuesta del comando ping. Con un poco de trabajo el dato se puede obtener con el siguiente comando

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

Obtener el valor de la consola en Matlab

Ahora, una vez que sabemos cómo obtener la IP en UNIX y Windows, solamente hay que llamar los comandos desde Matlab. Para ello existe la función system(). Una función a la que se le debe pasar una cadena de texto con el comando a ejecutar. Devolviendo dos variables como respuesta, la primera es el estado, generalmente 0 cuando el comando se ejecuta correctamente, y el segundo es la salida por pantalla, el valor con la respuesta. Así para obtener la IP local solamente se tiene que ejecutar en UNIX

[~, local] = system('ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk ''{print $2}''');

Mientras que si estamos en Windows

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

Para saber si el script se está ejecutando en PC o no se puede usar la función ispc() de Matlab.

Obtener la IP pública

Para obtener la IP pública, con la que se accede a internet, la mejor opción es usar un servicio como puede ser http://checkip.amazonaws.com. Al acceder a esta página web se obtiene como respuesta la IP pública de nuestro ordenador en una cadena de texto que se puede leer. Así, usando la función webread() el dato de la IP pública se puede obtener fácilmente ejecutando el comando.

options = weboptions('ContentType', 'text');
public = webread('http://checkip.amazonaws.com', options);
public = strtrim(public);

Crear una función para obtener las IP local y pública con Matlab

Una vez que sabemos cómo obtener ambos datos, es posible crear una función que automatice la tarea y seleccione el comando adecuado en función del sistema operativo. Esto es lo que se muestra en el siguiente código.

function [local, public] = getIP()
% GETIP   IP con la que se accede a la red
%   Este comando permite obtener tanto la IP local como la pública con la
%   que se está accediendo a la red
%
%   local, public] = getIP()
%

try
    if ispc()
        [~, local] = system('for /f "tokens=2 delims=[]" %a in (''ping -n 1 -4 "%computername%"'') do @echo %a');
    else
        [~, local] = system('ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk ''{print $2}''');
    end
    
    local = strtrim(local);
catch
    local = 'unknown';
end

try 
    options = weboptions('ContentType', 'text');
    public = webread('http://checkip.amazonaws.com', options);
    public = strtrim(public);
catch 
    public = 'unknown';
end

end

Nótese que en ambos casos el código se ejecuta dentro de estructuras try. Algo necesario ya que las llamadas al sistema o a la red pueden fallar por diferentes motivos.

Conclusiones

En esta ocasión se ha visto la forma de obtener las IP local y pública con Matlab, para lo que ha sido necesario aprender a obtener esta información en la terminal del sistema.

Imagen de Kevin Morison en Pixabay