GNU/Linux >> Znalost Linux >  >> Linux

Python:získejte výchozí bránu pro místní rozhraní/ip adresu v linuxu

Nejnovější verze netifaces umí to také, ale na rozdíl od pynetinfo , bude fungovat na jiných systémech než Linux (včetně Windows, OS X, FreeBSD a Solaris).


Zdá se, že http://pypi.python.org/pypi/pynetinfo/0.1.9 to umí, ale netestoval jsem to.


Pro ty lidi, kteří nechtějí další závislost a nemají rádi volání podprocesů, zde je návod, jak to udělat sami přečtením /proc/net/route přímo:

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

Nemám stroj big-endian k testování, takže si nejsem jistý, zda endianness závisí na architektuře vašeho procesoru, ale pokud ano, nahraďte < v struct.pack('<L', ... s = takže kód bude používat nativní endianness stroje.


Pro úplnost (a pro rozšíření alastairovy odpovědi) je zde příklad, který používá „netifaces“ (testováno pod Ubuntu 10.04, ale mělo by být přenosné):

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

Dokumentace pro 'netifaces':https://pypi.python.org/pypi/netifaces/


Linux
  1. Jak najít výchozí IP bránu v Linuxu

  2. Získejte zdrojový kód pro jakýkoli příkaz Linux

  3. Jak získat šířku okna konzoly Linux v Pythonu

  1. Jak zabalit aplikace Python pro Linux

  2. Získejte čas na vytváření souborů s Pythonem na linuxu

  3. Získejte IP adresu rozhraní v systému Linux

  1. ppl – Adresář příkazového řádku pro Linux

  2. Linux – Jak získat adresu IPv4 pro rozhraní z /proc?

  3. Linux – odpověď na stejném rozhraní jako příchozí?