Python で自身の IP アドレスを取得したい - Ubuntu 編
以前、Python から自身の IP アドレスを取得するという記事を書きました。
これは Windows ではいけたのですが、Ubuntu ではループバックアドレスしか取得できないことがわかりました。
そこで Ubuntu で IP アドレスを取得する方法を見つけたので、改めて公開します。
Python socket モジュールで自身の IP アドレスを取得する (Ubuntu)
実行環境は Python 3.6.5 / Ubuntu 18.04.1 LTS です。
$ python3 --version Python 3.6.5 :: Anaconda, Inc.
標準ライブラリの socket モジュールを使います。
リモートソケットに接続する socket API
以下の2種類の API があります。
- socket.connect(address)
- socket.connect_ex(address)
どちらも address に示されるリモートソケットに接続されます。
違いは、connect_ex ではエラーが発生した場合でも例外が送出されないところです。
詳しくは以下のリンクをご覧ください。
socket --- 低水準ネットワークインターフェイス — Python 3.8.2rc1 ドキュメント
たとえばデフォルトゲートウェイ(192.168.100.1とか)の80番ポートなどを指定するには
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((192.168.100.1, 80))
こんな感じで接続できます。
接続中の IP アドレスとポートを取得する socket API
- socket.getsockname()
上記の API でどこかに接続されているとき、その接続元である自分自身の IP とポートを表示します。
上の例に続いて s.getsockname() を実行すると下記のようになります。
s.getsockname()
# ('192.168.100.10', 60321) 等が出力される
上記を組み合わせて、自身の IP アドレスを取得する
import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((192.168.100.1, 80)) ip = s.getsockname()[0]
こんな感じで、ip に IP アドレスの文字列が取得できました。