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