GNU/Linux >> Tutoriels Linux >  >> Linux

Python :obtenir la passerelle par défaut pour une interface locale/adresse IP sous Linux

La dernière version de netifaces peut le faire aussi, mais contrairement à pynetinfo , il fonctionnera sur des systèmes autres que Linux (y compris Windows, OS X, FreeBSD et Solaris).


Il semble que http://pypi.python.org/pypi/pynetinfo/0.1.9 puisse le faire, mais je ne l'ai pas testé.


Pour ceux qui ne veulent pas de dépendance supplémentaire et n'aiment pas appeler des sous-processus, voici comment vous le faites vous-même en lisant /proc/net/route directement :

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)))

Je n'ai pas de machine big-endian sur laquelle tester, donc je ne sais pas si l'endianité dépend de l'architecture de votre processeur, mais si c'est le cas, remplacez le < en struct.pack('<L', ... avec = le code utilisera donc l'endianness natif de la machine.


Pour être complet (et pour développer la réponse d'alastair), voici un exemple qui utilise "netifaces" (testé sous Ubuntu 10.04, mais cela devrait être portable):

$ 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'

Documentation pour 'netifaces' :https://pypi.python.org/pypi/netifaces/


Linux
  1. Linux - Comment obtenir l'adresse IPv4 d'une interface à partir de /proc ?

  2. Linux - Répondre sur la même interface que celle entrante ?

  3. Comment trouver l'adresse IP de la passerelle par défaut sous Linux

  4. Comment obtenir la largeur de la fenêtre de la console Linux en Python

  5. Obtenez le temps de création de fichier avec Python sur Linux

10+ meilleurs IDE Python pour Linux

Utilisation d'ifstat pour les statistiques réseau Linux

bpython - Un interpréteur Python fantaisie pour Linux

Comment installer Setuptools pour Python sur Linux

Comment obtenir votre adresse IP sous Linux

Obtenir une adresse IP sous Linux :découvrez les nombreuses façons