GNU/Linux >> Belajar Linux >  >> Linux

Python:dapatkan gateway default untuk antarmuka/alamat ip lokal di linux

Versi terbaru dari netifaces dapat melakukannya juga, tetapi tidak seperti pynetinfo , ini akan bekerja pada sistem selain Linux (termasuk Windows, OS X, FreeBSD, dan Solaris).


Tampaknya http://pypi.python.org/pypi/pynetinfo/0.1.9 dapat melakukan ini, tetapi saya belum mengujinya.


Bagi orang-orang yang tidak menginginkan ketergantungan ekstra dan tidak suka memanggil subproses, inilah cara Anda melakukannya sendiri dengan membaca /proc/net/route langsung:

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

Saya tidak memiliki mesin big-endian untuk diuji, jadi saya tidak yakin apakah endianness bergantung pada arsitektur prosesor Anda, tetapi jika ya, ganti < di struct.pack('<L', ... dengan = jadi kode akan menggunakan endianness asli mesin.


Untuk kelengkapan (dan untuk memperluas jawaban alastair), berikut adalah contoh yang menggunakan "netifaces" (diuji di bawah Ubuntu 10.04, tetapi ini harus portabel):

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

Dokumentasi untuk 'netifaces':https://pypi.python.org/pypi/netifaces/


Linux
  1. Linux – Bagaimana Cara Mendapatkan Alamat IPv4 Untuk Antarmuka Dari /proc?

  2. Linux – Membalas Pada Antarmuka yang Sama Saat Masuk?

  3. Linux – Cara Portabel Untuk Mendapatkan Alamat Sumber Rute Default?

  1. Cara Menemukan IP Gateway Default di Linux

  2. Dapatkan delta mouse menggunakan Python! (di Linux)

  3. Linux/bash:Bagaimana cara mendapatkan alamat IPv6 antarmuka?

  1. Cara mengemas aplikasi Python untuk Linux

  2. Dapatkan Kode Sumber untuk Perintah Linux apa pun

  3. Cara mendapatkan lebar jendela konsol Linux dengan Python