Raspberry Piで動かすPythonのスクリプト書いてて、処理の中で自身のローカルIPアドレスをちょっと調べる必要があった。
調べると出てくる標準のsocket
ライブラリを使う方法だと取得できるのが127.0.0.1
だったので、お望みのローカルIPアドレスとかを取得できる方法をメモっとく。
結論
結論から。
外部モジュールのnetifaces
を使う。
環境
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster $ python -V Python 3.8.2
インストール
$ pip install netifaces
使い方
#!/usr/bin/env python # -*- coding: utf-8 -*- import netifaces def main(): interface_data = netifaces.ifaddresses('eth0') ip_v4 = interface_data[netifaces.AF_INET][0]['addr'] ip_v6 = interface_data[netifaces.AF_INET6][0]['addr'] mac = interface_data[netifaces.AF_LINK][0]['addr'] result = f"""\ ローカルアドレス IPv4: {ip_v4} IPv6: {ip_v6} MAC: {mac} """ print(result)
netifaces.ifaddresses(ネットワークインターフェース名)
で指定したインターフェースの情報をとってきて、それでIPアドレスとかMACアドレスとかを表示している。
余談
よくある下記みたいに、Python標準のsocket
モジュールを使う方法が紹介されているけど、冒頭で前述したとおり私の環境(Raspberry Pi)だと取得できたのが127.0.01
になった。
調べてると、Ubuntuだとそうなるとか、そんなようなことが書かれていたのだけれど、RasbianでもそうなってるのでDebianベースのOSだとそうなるのかな? しらんけど。