Pythonの標準ライブラリを使用してローカルIPアドレスを見つける

PYTHON3 チュートリアル

Pythonの標準ライブラリを使用してローカルIPアドレスを見つける方法を以下に示します。この方法では追加のパッケージをインストールする必要はありません。

方法1: socketモジュールを使用する

以下のコードは、デフォルトのインターフェイスで使用されるローカルIPアドレスを取得します。

import socket

def get_local_ip():
    try:
        # 一時的に外部に接続することでIPアドレスを取得
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.connect(("8.8.8.8", 80))  # GoogleのDNSサーバーを使用
            return s.getsockname()[0]
    except Exception as e:
        return f"Error: {e}"

local_ip = get_local_ip()
print(f"Local IP Address: {local_ip}")

説明:

  • socket.socket(socket.AF_INET, socket.SOCK_DGRAM)を使用してUDPソケットを作成。
  • Googleの公開DNSサーバー(8.8.8.8)に一時的に接続して、使用されているローカルIPを取得。
  • 接続は実際には行われず、ローカルインターフェイスが使用されます。

方法2: socket.gethostbynameを使用する

システムのホスト名を使用してIPアドレスを取得する簡単な方法です。

import socket

def get_local_ip_by_hostname():
    try:
        hostname = socket.gethostname()  # 現在のホスト名を取得
        return socket.gethostbyname(hostname)  # ホスト名からIPを取得
    except Exception as e:
        return f"Error: {e}"

local_ip = get_local_ip_by_hostname()
print(f"Local IP Address: {local_ip}")

注意:

  • この方法では、127.0.0.1(ループバックアドレス)が返される場合があります。

方法3: socket.getaddrinfoを使用する

複数のアドレスが存在する場合に適した方法です。

import socket

def get_local_ips():
    try:
        hostname = socket.gethostname()
        addresses = socket.getaddrinfo(hostname, None)
        return [addr[4][0] for addr in addresses]
    except Exception as e:
        return f"Error: {e}"

local_ips = get_local_ips()
print(f"Local IP Addresses: {local_ips}")

出力例:

Local IP Addresses: ['192.168.1.100', '127.0.0.1']

注意事項

  • マルチインターフェース環境(例: Wi-Fiと有線LAN)では、複数のIPアドレスが存在する場合があります。
  • 127.0.0.1(ループバックアドレス)はローカルIPアドレスとして認識されますが、ネットワーク上の他のデバイスからはアクセスできません。

このコードは、ローカルネットワーク内でのアドレス確認や簡単なネットワークスクリプトに役立ちます。

購読
通知
0 Comments
Inline Feedbacks
View all comments