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アドレスとして認識されますが、ネットワーク上の他のデバイスからはアクセスできません。
このコードは、ローカルネットワーク内でのアドレス確認や簡単なネットワークスクリプトに役立ちます。

