GNU/Linux >> Tutoriales Linux >  >> Linux

Python:obtenga la puerta de enlace predeterminada para una interfaz local/dirección IP en Linux

La última versión de netifaces puede hacer esto también, pero a diferencia de pynetinfo , funcionará en sistemas que no sean Linux (incluidos Windows, OS X, FreeBSD y Solaris).


Parece que http://pypi.python.org/pypi/pynetinfo/0.1.9 puede hacer esto, pero no lo he probado.


Para aquellas personas que no quieren una dependencia adicional y no les gusta llamar a los subprocesos, así es como lo hacen ustedes mismos leyendo /proc/net/route directamente:

import socket, struct

def get_default_gateway_linux():
    """Read the default gateway directly from /proc."""
    with open("/proc/net/route") as fh:
        for line in fh:
            fields = line.strip().split()
            if fields[1] != '00000000' or not int(fields[3], 16) & 2:
                # If not default route or not RTF_GATEWAY, skip it
                continue

            return socket.inet_ntoa(struct.pack("<L", int(fields[2], 16)))

No tengo una máquina big-endian para probar, por lo que no estoy seguro de si el endianness depende de la arquitectura de su procesador, pero si es así, reemplace el < en struct.pack('<L', ... con = por lo que el código usará el endian nativo de la máquina.


Para completar (y ampliar la respuesta de Alastair), aquí hay un ejemplo que usa "netifaces" (probado en Ubuntu 10.04, pero debería ser portátil):

$ sudo easy_install netifaces
Python 2.6.5 (r265:79063, Oct  1 2012, 22:04:36)
...
$ ipython
...
In [8]: import netifaces
In [9]: gws=netifaces.gateways()
In [10]: gws
Out[10]:
{2: [('192.168.0.254', 'eth0', True)],
 'default': {2: ('192.168.0.254', 'eth0')}}
In [11]: gws['default'][netifaces.AF_INET][0]
Out[11]: '192.168.0.254'

Documentación para 'netifaces':https://pypi.python.org/pypi/netifaces/


Linux
  1. Cómo empaquetar aplicaciones de Python para Linux

  2. Linux:¿la forma portátil de obtener la dirección de origen de la ruta predeterminada?

  3. Cómo encontrar la IP de la puerta de enlace predeterminada en Linux

  4. ¡Obtenga deltas del mouse usando Python! (en Linux)

  5. Linux/bash:¿Cómo obtener la dirección IPv6 de la interfaz?

Más de 10 mejores IDE de Python para Linux

Uso de ifstat para estadísticas de red de Linux

bpython:un intérprete sofisticado de Python para Linux

Cómo instalar Setuptools para Python en Linux

Cómo obtener su dirección IP en Linux

Obtenga una dirección IP en Linux:descubra las muchas formas