PythonでローカルIPアドレスを取得する方法

PythonでローカルIPアドレスを取得するには、標準ライブラリのsocketモジュールを使います。この方法はネットワークに依存せず、ローカルのIPアドレスを確実に取得できるため、システムの情報収集に便利です。

基本的な取得方法

以下のコードは、ホスト名に対応するローカルIPアドレスを取得します。

import socket
local_ip = socket.gethostbyname(socket.gethostname())
print(local_ip)

ただし、この方法は場合によって127.0.0.1(ループバックアドレス)を返すことがあります。

ネットワーク接続を利用する方法

より正確にローカルIPアドレスを取得するには、UDPソケットを使って、外部アドレスへの接続を試みます。実際にデータは送信されないため、ネットワークトラフィックを発生させません。

import socket
def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        s.connect(('8.8.8.8', 80))
        return s.getsockname()[0]
    finally:
        s.close()
print(get_local_ip())

この方法では、ローカルIPアドレスが確実に取得できます。

まとめ

ローカルIPアドレスの取得には、socketモジュールが最適です。特に、gethostbyname()やUDP接続を利用する方法が汎用的であり、ネットワーク接続の有無にかかわらず機能します。