私のIPアドレス
ターミナルとシステム環境の使い方
ターミナルの使い方だけを説明する:各「よく使うバリエーション」ごとにコマンド + それが解決する問題(プロトコルスタック、出力形式、タイムアウト、リトライ、パスの意味)を説明する。
macOS / Linux / Raspberry Pi / BSD
ターミナルで最もよくある要件は:出力がクリーンであること(1行でコピー/書き込み/比較できる)と、スクリプトが固まらないこと。 そのため、ここでの推奨書式はデフォルトで:サイレント(出力を汚さない)+ HTTPS(誤ったプロトコルを回避)+ 必要に応じてタイムアウト(ハング防止)を含む。
基本の使い方(最推奨)
curl -4 my.ipin.io
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
-s:進捗バー/メッセージを消して、出力をより純粋にする(スクリプトにノイズを混ぜない)。https://:完全なスキームの明示を強く推奨。環境によって http が既定になり、リダイレクト/遮断/ポートポリシー問題を招くのを避ける。- ルートパス
/:IPv4 を厳密に出力。IPv4 が取れない場合は失敗する(IPv6 を IPv4 と誤認して使うのを防ぐ)。
よく使うバリエーション(実運用で最頻出のセット)
# A1) IPv6 だけ(IPv6 の検証/切り分け用)
curl -s https://my.ipin.io/v6
# A2) 位置の概要(ターミナルで読みやすいテキスト出力)
curl -s https://my.ipin.io/info
# A3) ターミナルで JSON を強制(UA を curl 以外に変更)
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
# A4) IPv4 強制 / IPv6 強制(実際にどのプロトコルスタックで接続しているかの切り分け)
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
# A5) タイムアウト追加(スクリプト必須:ネットワーク揺らぎで固まるのを防ぐ)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
# A6) リトライ追加(弱い回線/一時的な揺らぎ:1〜2回推奨)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
バリエーションの説明(本当に押さえるべきポイント)
/v6:エンドポイントとして IPv6 のみ返す。「IPv6 が使えるかを明確に検証」する用途。/info:エンドポイントとして IP + 位置情報フィールドを返す。ターミナルでは可読性寄りで、「出口の目視確認」に向く。-A "Mozilla/5.0":出力形式の制御。デフォルトで curl の UA には curl が含まれる → サービスはテキストを返す;UA を変える → サービスは JSON を返す。-4/-6:接続レイヤーでプロトコルスタックを強制(クライアントが v4/v6 のみで接続する)。「なぜ常に v6 になるのか」の切り分けに使う。--connect-timeout:「接続確立」フェーズのみを制御。ハンドシェイク/接続が遅いとここで中断する。--max-time:リクエスト全体の上限時間。自動化で最重要(ハング防止)。--retry:成功率を上げるが、少数(1〜2回)だけ推奨。多すぎるとタスクが遅くなり障害を増幅する。
Android(Termux)
Termux のよくある問題:モバイル回線は揺らぎが大きく、経路が複雑で、プロトコルスタック選択も不安定。 そのためデフォルト推奨は:スタック固定 + タイムアウト + 必要ならリトライ。
基本の使い方(推奨)
curl -s -4 --connect-timeout 5 --max-time 10 https://my.ipin.io
よく使うバリエーション
# B1) 位置の概要(出口の場所を素早く確認)
curl -s https://my.ipin.io/info
# B2) IPv6 検証(IPv6 を測りたいときだけ)
curl -s -6 https://my.ipin.io/v6
# B3) 弱い回線:少数リトライ
curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io
バリエーションの説明
-4:IPv4 が目的なら固定し、環境が IPv6 優先で結果がブレるのを避ける。/info:モバイル回線は出口が切り替わりやすい。期待どおりの場所かを確認するのに直感的。- リトライ戦略:モバイルは一時的タイムアウトが起きやすい。少数リトライで成功率が大きく上がる。
Windows(CMD / PowerShell)
Windows では用途を分けるのがおすすめ: CMD/バッチは「1行テキストを取る」方向、PowerShellは「JSON を取ってそのままフィールド解析」方向。
基本の使い方(テキストで 1 行 IP)
curl.exe -s https://my.ipin.io
よく使うバリエーション
# C1) 位置の概要(ターミナルで読める)
curl.exe -s https://my.ipin.io/info
# C2) PowerShell で JSON を取得(スクリプトでのフィールド解析向き)
Invoke-RestMethod -Uri "https://my.ipin.io/info"
# C3) IPv6 検証
curl.exe -s https://my.ipin.io/v6
# C4) 接続の切り分け(DNS、ハンドシェイク、タイムアウト理由を見る。出力は長い)
curl.exe -v https://my.ipin.io/info
バリエーションの説明
Invoke-RestMethod:JSON 向き。手動での解析手間を省ける。-v:切り分け専用。大量のデバッグ情報が出るため、スクリプトで常用しない。- よくある原因:システムプロキシ、企業ゲートウェイ、DNS の書き換え、hosts ルールにより「同じコマンドでも挙動が違う」ことがある。
iOS(iSH / 軽量ターミナル)
軽量ターミナルは wget しかないことが多い。注意:wget のデフォルト UA は curl を含まないことが多く、その場合 JSON が返りやすい。
「1行テキスト」が欲しいなら、UA を明示してターミナル向けテキスト出力を発動させる必要がある。
基本の使い方
wget -qO- https://my.ipin.io
よく使うバリエーション
# D1) 位置の概要
wget -qO- https://my.ipin.io/info
# D2) 純テキストを強制(1行 IP)
wget -qO- -U "curl/8" https://my.ipin.io
# D3) JSON を強制(安定した統合)
wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info
バリエーションの説明
-qO-:静かにして stdout に出力。スクリプト処理に便利。-U:出力形式制御の中核スイッチ(UA に curl を含む → テキスト;UA が curl 以外 → JSON)。
OpenWRT / 組み込み機器
組み込み機器の最重要目標は:固まらないこと。なので必ずタイムアウトを設定する。 「グローバル IP 変更検知」でも誤判定を避ける:リクエスト失敗=IP 変更ではない。
基本の使い方(タイムアウト付き)
wget -qO- --timeout=10 https://my.ipin.io
よく使うバリエーション
# E1) 位置の概要(出口セルフチェック)
wget -qO- --timeout=10 https://my.ipin.io/info
# E2) 純テキストを強制(1行 IP)
wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io
バリエーションの説明
--timeout:組み込みではデフォルトで付けることを強く推奨。定期タスクが固まるのを防ぐ。- 出力モードの安定化:wget はデフォルトで JSON を返す場合がある。スクリプトが 1 行 IP だけ欲しいなら、UA でテキスト出力を発動させる方が安定。
Docker / CI / 自動化タスク
自動化環境は不確実性が高い:DNS の揺らぎ、短時間のタイムアウト、出口ポリシー変更が起きやすい。 推奨デフォルト:タイムアウト + 少数リトライ + 出力形式固定(runner が変わっても解析が壊れないように)。
基本の使い方(タイムアウト付き)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
よく使うバリエーション(CI で最実用)
# F1) 位置情報を安定取得(リトライ付き)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F2) CI で JSON を安定化:UA を curl 以外に固定
curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F3) 切り分け:プロトコルスタック強制
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
バリエーションの説明
- UA の固定:CI ではイメージ/ツールごとに UA が違うことがある。固定しないと出力形式がブレる。
- 少数リトライ:成功率は上がるが、失敗は素早く露出させることも重要(原因特定のため)。
よくある質問(FAQ)
Q1:curl -s https://my.ipin.io を使うと、なぜ時々失敗したりエラーが返ったりするのですか?
ルートパスは「厳密 IPv4」:現在の経路で IPv4 を取得できない場合、明確に失敗する(IPv6 を返して成功したように見せない)。 これは通常:IPv6-only ネットワーク、特定のプロキシ/ゲートウェイ環境、またはクライアントが IPv6 に強制されており利用可能な IPv4 がない場合に発生する。
切り分け方法:curl -s -4 で IPv4 を強制;または /info で現在の出口 IP を確認して次の手を決める。
Q2:curl で /info を叩くと、なぜ JSON ではないのですか?
ターミナルツールはデフォルトで「ターミナル出力モード」になっており、/info はそのモードでは読みやすいテキスト枠を出力する。
JSON(jq/プログラム解析向け)が欲しいなら、UA を curl 以外に変えればよい。
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
Q3:同じコマンドなのに、別のマシンだと出力形式が違うのはなぜですか?
出力形式はリクエストの User-Agent に依存する。ツール(curl / wget / あるディストリの標準ツール)によって既定 UA が異なる場合があり、
それによってテキストまたは JSON の差が出る。
解決策:UA を固定する。テキストが欲しければ UA に curl を含める;JSON が欲しければ UA に curl を含めない。 自動化/CI では UA 固定が「安定した解析」の鍵になる。
Q4:IPv4 だけ欲しいのに、自分が「IPv6 を通っている」気がするのはなぜですか?
ここは 2 つを区別する必要がある:
接続時に使うプロトコルスタック(クライアントが v4/v6 のどちらで接続するか)と、
エンドポイントが返す IP の種類(パス / か /v6 で決まる)。
切り分けのおすすめ:-4/-6 で接続プロトコルを強制し、ネットワーク環境が実際にどちらを好むか確認する。
IPv4 だけ欲しいならルートパスを使い、必要なら -4 を強制する。
Q5:スクリプトでは、誤判定しにくく・固まりにくくするにはどう書けばいいですか?
推奨セット:サイレント(ノイズ回避)、タイムアウト(ハング回避)、少数リトライ(揺らぎ耐性)、 そして 失敗時に古い値を上書きしない(失敗を変化と誤認しない)。
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io
Q6:curl と wget、どちらを優先すべきですか?
curl が使えるなら curl:パラメータが豊富で切り分けも強い。 ただし軽量/組み込み環境で wget しかないのはよくある。wget でも問題なく、重要なのは: タイムアウト設定、stdout 出力、必要なら UA を固定して出力形式をロックすること。