Obtener la IP de cada interfaz en Perl

Obtener la IP de la máquina no tiene mucho misterio. Pero cuando se trata de servidores con varias interfaces de red, algunas incluso virtuales, la cosa cambia. Y se trata de algo que puede tener muchas aplicaciones, como por ejemplo un script que distinga entre si las copias que se van a realizar son realmente desde/hacia una máquina remota o en local y agilizar el proceso.

La manera más resumida en el caso de Linux es filtrar la salida de ifconfig:

my @IP = (`ifconfig -a` =~ /inet addr:(\S+)/g);

Pero es cierto que algún día los desarrolladores de la distribución de turno pudieran decidir traducir las palabras inet addr por direccion inet o a saber, por lo que ya estarían fastidiando la expresión regular y por tanto el invento. Así que por eso para soluciones más elegantes y multiplataforma, que para eso es Perl, se puede hacer uso de algún módulo como Net::Interface. Quedando lo de arriba en algo como:

my %IP = map { 
    ($_ => [
                  map { Net::Interface::inet_ntoa($_) } # hace entendibles las direcciones
                  $_->address,
           ]                      # obtiene las direcciones
    );
} Net::Interface->interfaces;     # obtiene las interfaces

Que devolvería un hash con el nombre de cada interfaz como clave y su IP como valor. Idóneo por ejemplo para invertirlo y usar la IP en el patrón de búsqueda de una expresión regular de sustitución.

Aunque a decir verdad no sé si este módulo del ejemplo funcionará en Windows. 😀

Fuente → How can I find the IP addresses for each interface, in Perl? [Stack Overflow].

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *