GNU/Linux >> Linux の 問題 >  >> Linux

Python:Linux でローカル インターフェイス/IP アドレスのデフォルト ゲートウェイを取得する

netifaces の最新バージョン これもできますが、pynetinfo とは異なります 、Linux 以外のシステム (Windows、OS X、FreeBSD、Solaris を含む) でも動作します。


http://pypi.python.org/pypi/pynetinfo/0.1.9 でできるようですが、テストしていません。


余分な依存関係を必要とせず、サブプロセスを呼び出すのが嫌いな人のために、/proc/net/route を読んで自分で行う方法を次に示します。 直接:

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

テストするビッグ エンディアンのマシンがないため、エンディアンがプロセッサ アーキテクチャに依存しているかどうかはわかりませんが、依存している場合は < を置き換えてください struct.pack('<L', ...= で そのため、コードはマシンのネイティブ エンディアンを使用します。


完全を期すために (そして alastair の回答を拡張するために)、「netifaces」を使用する例を次に示します (Ubuntu 10.04 でテスト済みですが、移植可能である必要があります)。

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

「netifaces」のドキュメント:https://pypi.python.org/pypi/netifaces/


Linux
  1. Python で Linux コンソール ウィンドウの幅を取得する方法

  2. LinuxでPythonを使用してファイル作成時間を取得する

  3. Linux でインターフェイスの IP アドレスを取得する

  1. Linux用のPythonアプリケーションをパッケージ化する方法

  2. ppl –Linux用のコマンドラインアドレスブック

  3. Linux/bash:インターフェイスの IPv6 アドレスを取得するには?

  1. Linux – / procからインターフェイスのIpv4アドレスを取得する方法は?

  2. Linux –着信と同じインターフェースで応答しますか?

  3. Linux –デフォルトルートの送信元アドレスを取得するためのポータブルな方法?