JavaScriptでIP位置情報を取得するガイド
ブラウザーまたはNode.jsから1つのIPアドレスの位置情報を取得します。
JavaScriptでIPアドレスを検索する
リクエストにはIPv4またはIPv6アドレスを1つ指定し、JSONを要求します。サンプルのアドレスを、調査するアドレスに置き換えてください。
const ip = '8.8.8.8'; // Replace with an IPv4 or IPv6 address.
const response = await fetch(
'https://api.ipquery.io/' + encodeURIComponent(ip) + '?format=json',
{ signal: AbortSignal.timeout(8000) }
);
if (!response.ok) throw new Error('IPQuery returned HTTP ' + response.status);
const data = await response.json();
if (data.ip !== ip || !data.location || !data.isp) {
throw new Error('Unexpected IPQuery response');
}
console.log(data.location.country, data.location.city, data.isp.asn);fetchとAbortSignal.timeoutを利用できる最新のブラウザーまたはNode.jsで実行してください。ブラウザーからのリクエストでは指定したアドレスを検索します。自分のIPを取得するエンドポイントでは、ブラウザーの接続元を特定します。
位置情報とネットワークのフィールドを読み取る
location.countryとlocation.country_codeはおおよその国を示します。location.cityは空の場合や不正確な場合があります。isp.asnはネットワークを識別するもので、そのアドレスを使用している個人や企業とは異なる場合があります。
リクエストの接続元アドレスを取得するには、次を呼び出します: https://api.ipquery.io/?format=json. サーバーからのリクエストではサーバーの接続元IPが返り、ブラウザーからのリクエストではその接続の外部から見えるアドレスが返ります。
DashyでIPQueryを使う
DashyのPublic IPウィジェットは、APIキーなしでIPQueryを利用できます。Dashyのいずれかのセクションのwidgetsリストに、次の設定を追加してください:
- type: public-ip
options:
provider: ipqueryDashyのプロキシ設定が無効の場合、ブラウザーがリクエストを送信し、ウィジェットにはその接続のパブリックIPとおおよその位置が表示されます。ウィジェットの最上位でuseProxy: trueを設定するか、appConfig.widgetsAlwaysUseProxyを有効にすると、リクエストはDashyのサーバーを経由し、代わりにサーバーのパブリックIPが表示されます。ウィジェットの最上位でuseProxy: falseを設定しても、ダッシュボード全体の設定は上書きされません。
このウィジェットは、IPQueryの接続元IPを取得するエンドポイントを使用します。別のアドレスを調べるには、上記の単一IP用JavaScriptリクエストを使用してください。
DashyのPublic IPウィジェットの設定項目精度とセキュリティ
IPジオロケーションはネットワークの所在地の推定であり、端末の位置ではありません。VPN、プロキシ、モバイルネットワーク、通信事業者のゲートウェイにより、アドレスがユーザーから遠く離れた場所に位置付けられる場合があります。欠けている値を推測で補わず、不明として扱ってください。
アプリケーションがX-Forwarded-Forを読み取る場合は、自分で管理するプロキシが付与した値だけを信頼してください。クライアントが送信したヘッダーは偽装できます。検索リクエストの前にアドレスを検証し、タイムアウトとHTTPエラーは成功した結果とは別に処理してください。
APIリファレンス