インターネットに接続するデバイスの公開IPアドレスを把握することは、セキュリティの強化に不可欠です。
ファイアウォールの設定には、特定のIPアドレスからのアクセスを許可する必要があります。
APIテストを行う際には、外部APIがIPベースでアクセス制限をしていることがあります。
リモートサーバーへの安全なアクセスには、自身のIPアドレスを許可リストに追加する必要がある場合があります。
地域制限の確認やアカウントセキュリティの監視にも、自身のIPアドレスを知ることが役立ちます。
この記事では、グローバルIPアドレスを簡単に知る方法としてPythonコードを紹介します。
プログラム(Python)によるIPアドレスの取得
Pythonスクリプトを用いて自分のグローバルIPアドレスを取得する方法を紹介します。
urllib.requestモジュールを利用し、外部のサービスからIPアドレスを取得する簡単なコード例を示します。
このプロセスは非常にシンプルです。
Pythonがインストールされている環境であれば、誰でもすぐに試すことができます。
以下が、そのコードになります。
from urllib.request import urlopen import json # APIのURL url = "https://api.ipify.org?format=json" # URLを開いて、レスポンスを読み込む with urlopen(url) as response: data = response.read().decode("utf-8") # JSONデータをパースしてIPアドレスを取得 ip_address = json.loads(data)["ip"] # IPアドレスを表示 print(f'Your outbound IP address is: {ip_address}')
上記を実行すると、コンソールに次のように表示されます。
Your outbound IP address is: 123.123.123.123
これは、プログラムを実行する環境のグローバルIPとなります。
サーバーでこのプログラムを実行すると、そのサーバーのグローバルIPが表示されます。
また、AWS Lambda関数で同じことを行う場合は以下のコードとなります。
from urllib.request import urlopen import json def lambda_handler(event, context): with urlopen("https://api.ipify.org?format=json") as response: data = response.read().decode("utf-8") ip_address = json.loads(data)["ip"] return { 'statusCode': 200, 'body': f'Outbound IP address: {ip_address}' }
実際にLambdaで実行した結果は、以下。
Response { "statusCode": 200, "body": "Outbound IP address: 3.107.10.79" }
このIPアドレスは、オーストラリアにありますね。
確かに、選択しているリージョンと同じです。
なお、このIPアドレスは固定ではありません。
明日実行したら、また異なるIPアドレスになっているかもしれません。
ipify – A Simple Public IP Address API
https://api.ipify.org
コードに上記のURLが記載されていました。
このURLは、ipifyのURLとなります。
ipifyは、開発者が容易に利用できる公開IPアドレス取得用のシンプルなAPIです。
このサービスは、プログラムからのHTTPリクエストに応じて、
ユーザーの現在の公開IPアドレスをテキストやJSON形式で返します。
無料でアクセス可能であり、高い信頼性と無制限の利用が可能な点が特徴です。
APIは、単純なGETリクエストを通じて利用でき、特別な認証や複雑な設定は不要です。
利用方法は、以下の4タイプが存在しています。
https://api.ipify.org https://api.ipify.org?format=json https://api.ipify.org?format=jsonp https://api.ipify.org?format=jsonp&callback=getip
希望するレスポンス形式に応じて選択することになります。
プレーンテキスト形式
URL: https://api.ipify.org
このURLにアクセスすると、ipifyはプレーンテキスト形式で現在の公開IPアドレスを返します。
JSON形式
URL: https://api.ipify.org?format=json
format=jsonパラメータを追加することで、レスポンスがJSON形式で返されます。
これにより、プログラムによる解析が容易になります。
上記のPythonコード上でもJSON形式を利用しています。
JSONP形式
URL: https://api.ipify.org?format=jsonp
format=jsonpパラメータを使用すると、レスポンスがJSONP形式で返されます。
これは、ウェブページ上でクロスドメインのHTTPリクエストを行う際に有用です。
JSONP形式(カスタムコールバック関数付き)
URL: https://api.ipify.org?format=jsonp&callback=getip
callbackパラメータに関数名を指定します。
レスポンスに含まれるJSONP形式のデータを処理するためのカスタムコールバック関数を指定できます。
これにより、レスポンスデータの取り扱いがさらに柔軟になります。