自ホストの外側の IP アドレスを curl で取得する。

IP アドレスでアクセス制限すfる場合に自ネットワークの外側からみた IP アドレスを調べたい場合がある。外部の API サーバーや Web サーバーが接続元の IP アドレスで制限するような場合だ。

ローカルのルーターに入れば確認することは当然にできるがまあ面倒です。curl でアクセスすると自ネットの IP アドレスを返してくれるサイトがあります。以前から ipinfo.io は知ってましたがこのサイトだと IPv4 しか返してくれません。(恐らく IPv4 でしか接続を受け付けてくれないのでしょう。)

Claude に “curl で自ホストのIPアドレスを確認できるサイトをリストアップして” と聞いてみると以下の回答を返してくれました。

IP アドレスを確認できるウェブサイトに対して、curl コマンドでアクセスできるものをリストアップします。以下のサイトでは外部から見たあなたの IP アドレスを確認できます:

1. `curl ifconfig.me`
2. `curl ipinfo.io/ip`
3. `curl api.ipify.org`
4. `curl checkip.amazonaws.com`
5. `curl icanhazip.com`
6. `curl ipecho.net/plain`
7. `curl ip.tyk.nu`
8. `curl wtfismyip.com/text`
9. `curl ipaddress.sh`
10. `curl myip.dnsomatic.com`

これらのサイトはプレーンテキストで IP アドレスだけを返すため、curl コマンドと相性が良いです。追加情報が必要な場合は、例えば `curl ipinfo.io` のようにすると、IP アドレスだけでなく地理的な位置情報なども取得できます。

ひとつづつ確認してみると、IPv6 と IPv4 を返すサイトが半々くらいでした、10 はアクセスできませんでした。で、自分にはこれらのサイト名はちょっと覚えにくかったので IPv6 と IPv4 を両方とも表示するスクリプトにしました。

# get outside IP address. this script gets IPv6 and IPv4 address both.

#!/bin/bash

# for IPv6
echo -n "IPv6: "

# 出力に改行がないパターン
curl ipecho.net/plain
# curl ipecho.net/plain
# curl ip.tyk.nu
echo ""

# 出力に改行のあるパターン
# curl wtfismyip.com/text
# curl ifconfig.me
# curl icanhazip.com
# curl wtfismyip.com/text

# for IPv4
echo -n "IPv4: "
curl ipinfo.io/ip
#curl api.ipify.org
echo ""

# 出力に改行のあるパターン
# curl checkip.amazonaws.com
# curl ipaddress.sh