Python で IP アドレスを取得する

Shivam Arora 2023年1月30日
  1. Python で socket.gethostname() 関数を使用してローカル IP アドレスを取得する
  2. Python で socket.getsockname() 機能を使用してローカル IP アドレスを取得する
  3. Python で netifaces モジュールを使用してローカル IP アドレスを取得する
Python で IP アドレスを取得する

IP アドレスは、0.0.0.0 から 255.255.255.255 までの一連の数字で、各番号は 0〜255 のアドレス範囲です。ネットワーク上でデバイスを一意に識別できます。

この記事では、Python を使用してローカル IP アドレスを取得します。

Python で socket.gethostname() 関数を使用してローカル IP アドレスを取得する

Python の socket モジュールを使用して、ネットワーク接続を作成し、ネットワークを介してメッセージを送信できます。

関数 gethostname() は、Python が現在実行されているシステムのホスト名を返します。

例えば、

import socket

print(socket.gethostbyname(socket.gethostname()))

出力:

192.168.0.118

Python で socket.getsockname() 機能を使用してローカル IP アドレスを取得する

コンピュータデバイスにインターネットに接続されたルートがある場合は、getsockname() 関数を使用できます。IP アドレスとポートをタプルの形式で返します。

以下のコードを参照してください。

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])

出力:

192.168.0.112

このメソッドは、ローカルマシンのプライマリ IP、つまりデフォルトルートを返します。

この関数を使用して、ルーティング可能なインターネットアクセスを必要としないユーザー定義関数を作成することもできます。

以下のコードを参照してください。

import socket


def extract_ip():
    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        st.connect(("10.255.255.255", 1))
        IP = st.getsockname()[0]
    except Exception:
        IP = "127.0.0.1"
    finally:
        st.close()
    return IP


print(extract_ip())

出力:

192.168.0.112

上記の方法は、すべてのインターフェースで機能します。また、すべてのパブリック、プライベート、外部 IP でも機能します。この方法は、Linux、Windows、および OSX で効率的です。

Python で netifaces モジュールを使用してローカル IP アドレスを取得する

netifaces モジュールは、ネットワークインターフェイスとそのステータスに関する情報を提供するために使用されます。

以下に示すように、これを使用してローカルマシンの IP アドレスを取得できます。

from netifaces import interfaces, ifaddresses, AF_INET

for ifaceName in interfaces():
    addresses = [
        i["addr"]
        for i in ifaddresses(ifaceName).setdefault(AF_INET, [{"addr": "No IP addr"}])
    ]
    print(" ".join(addresses))

出力:

No IP addr
No IP addr
No IP addr
No IP addr
192.168.0.104
127.0.0.1

関連記事 - Python Network