IP情報の照会
IPアドレスの地理的位置、ISP、ASNなどの詳細情報を照会します
よくある質問
IPアドレスの位置情報は正確ですか?
IP地理情報は通常、都市レベルまで正確ですが、数十〜数百キロの誤差が生じる場合があります。具体的な街道や番地まで特定することはできません。
なぜ私のIPアドレスは変化するのですか?
家庭用ブロードバンドでは、ほとんどの場合動的IPアドレス割り当て(DHCP)が使用されており、ISPが定期的にIPを変更します。企業やサーバーでは通常、固定IP(静的IP)が使用されます。
自分の実際のIPアドレスを隠すにはどうすればよいですか?
VPN、プロキシサーバー、またはTorネットワークを使用して実際のIPを隠すことができます。ただし、これらのサービスはネットワーク速度の低下や、一部のウェブサイトへのアクセス制限を引き起こす可能性があります。
なぜ私は2つのIPアドレスを持っているのですか?
IPv4とIPv6の両方のアドレスを持っている可能性があります。現代のネットワークはIPv4からIPv6へ移行中であり、多くのデバイスが両方のプロトコルをサポートしています。
IPv4 と IPv6:なぜIPv6が必要なのか?
IPv4(1981年)
形式:4つの10進数の組(例:192.168.1.1)
合計:約43億アドレス(2³² = 4,294,967,296)
問題:アドレスが枯渇寸前で、2011年にはすでに割り当てが完了しました
長さ:32ビット
IPv6(1998年)
形式:16進数8組(例:2001:0db8::1)
総数:約340垓億億億個のアドレス(2¹²⁸)
利点:アドレス数がほぼ無限で、地球の砂粒1粒につき1つ割り当てても余る
長さ:128ビット
なぜIPv4は不足しているのか?
- • 世界人口は80億人で、1人あたり最低2〜3台のデバイス(スマートフォン、PC、タブレット)を所有
- • IoTデバイスが爆発的に増加(スマートホーム、自動車、ウェアラブル機器)
- • 企業やデータセンターは大量のIPアドレスを必要とする
- • 初期の割り当てが不適切(例:MITは1600万個のIPを保有)
特殊なIPアドレス範囲
ループバックアドレス
127.0.0.0/8(127.0.0.1 - 127.255.255.255)
ローカルホストでのテスト用。データはネットワークに出力されず、localhostを表すには通常127.0.0.1を使用
用途:ローカルサービスのテスト、開発・デバッグ
プライベートアドレス
- 10.0.0.0/8(10.0.0.0 - 10.255.255.255)- クラスA
- 172.16.0.0/12(172.16.0.0 - 172.31.255.255)- クラスB
- 192.168.0.0/16(192.168.0.0 - 192.168.255.255)- クラスC
ローカルネットワーク内で使用。直接インターネットにアクセスできず、NAT変換が必要
用途:家庭ネットワーク、企業内ネットワーク
APIPAアドレス
169.254.0.0/16
DHCPサーバーが利用できない場合、システムが自動的に割り当てる一時的なアドレス
用途:自動設定(ネットワーク設定失敗を示す)
マルチキャストアドレス
224.0.0.0/4(224.0.0.0 - 239.255.255.255)
1対多通信に使用。例:動画ライブ配信、IPTV
予約済みアドレス
- 0.0.0.0/8 - 「このネットワーク」を表す
- 255.255.255.255 - ブロードキャストアドレス
- 192.0.2.0/24 - ドキュメント例専用
- 198.18.0.0/15 - ベンチマークテスト専用
最強パブリックDNSサーバー
Google DNS
8.8.8.8 / 8.8.4.4
2001:4860:4860::8888 / 2001:4860:4860::8844
世界で最も速く、安定しており、DNSSECをサポート
Cloudflare DNS
1.1.1.1 / 1.0.0.1
2606:4700:4700::1111 / 2606:4700:4700::1001
プライバシー重視、超高速、ログ記録なし
Quad9 DNS
9.9.9.9 / 149.112.112.112
セキュリティ保護、悪性サイトのブロック
OpenDNS
208.67.222.222 / 208.67.220.220
親の監視、コンテンツフィルタリング
アジア地域 DNS
- 阿里雲 DNS(中国):223.5.5.5 / 223.6.6.6
- DNSPod(中国):119.29.29.29
- 114 DNS(中国):114.114.114.114
興味深い IP 知識
💰 最も高価な IP アドレス範囲
1.0.0.0/8 は、APNIC が研究目的で数百万ドルで購入しました。特定の「プレミアム」IPアドレス(例:8.8.8.8、1.1.1.1)は非常に価値があり、Cloudflare は通信会社から 1.1.1.1 を高額で購入しました。
📍 なぜ同じ IP で異なる場所が表示されるのですか?
- • IP 地理位置データベースの違い(各 API のデータソースが異なる)
- • 動的 IP アドレスの変更(プロバイダーによる再割り当て)
- • VPN/プロキシサーバー(プロキシサーバーの位置が表示されます)
- • CDN ノード(最も近い CDN サーバーの位置が表示されます)
- • モバイルネットワーク(基地局の位置が不正確な場合があります)
📊 IPv6 の導入率
2024年現在、世界全体の IPv6 導入率は約40%で、インド、アメリカ、ドイツがリードしています。中国は約30%です。ベルギーは世界で最も IPv6 導入率が高い国で、60%を超えています。
🎂 最初の IP アドレス
1983年1月1日、インターネットは正式に TCP/IP プロトコルを採用し、最初の IP アドレスが誕生しました。BBN Technologies のレナード・クラインロック氏が、最初に IP アドレスを使用した人物とされています。
🗑️ IP アドレスの不均衡な割り当て
初期のインターネットでは、IP アドレスの割り当てが非常に豪快でした。MIT(1つの大学)は 1600万の IP(全体の 18.0.0.0/8)を所有し、アップルは 1600万の IP(17.0.0.0/8)を保有していました。一方、中国全土には約3.3億の IP しか割り当てられず、10億人以上のインターネットユーザーを支える必要があります。1人あたり2台のデバイスを想定すると、最低でも20億の IP が必要です。この不均衡な分配により、中国は大量の NAT 技術を使用して IP を共有せざるを得ませんでした。
🚫 IP ブラックリスト
世界には複数のIPブラックリストデータベース(例:Spamhaus)があり、スパムメール、マルウェア、DDoS攻撃などの発信元IPを特定するために使用されます。IPがブラックリストに登録されると、メールが拒否されたり、ウェブサイトがブロックされたりする可能性があります。
🤯 IP地理情報の奇妙な事例
アメリカ・カンザス州の一般家庭が、MaxMind社のIPデータベースでデフォルト位置(緯度38°N、経度97°W、米国地理的中心)として設定されたため、数百万の正確な位置が特定できないIPアドレスがすべてこの場所を指すようになってしまいました。この家庭は不本意にも「アメリカ全土のハッカーの拠点」とされ、FBIや警察、債権者、詐欺被害者からの多数の電話や訪問、さらには夜中に家に押し入る事件まで発生しました。2016年、この家庭はMaxMindを訴え、最終的に賠償を勝ち取りました。
💸 IPv4アドレスは売買可能
IPv4アドレスの枯渇により、IPアドレスは取引可能な商品となりました。闇市場での価格は1アドレスあたり40ドルに達することもあります。2011年、マイクロソフトは破産したNortel社から66.6万個のIPアドレスを750万ドルで購入し、平均して1アドレス約11.25ドルでした。2014年には、アマゾンやマイクロソフトなどの大手テクノロジー企業がIPv4アドレスを争奪し、価格は一時的に急騰しました。
🤦 IPv4設計者の"見誤り"
1981年、IPv4の設計者たちは「42億のアドレスがあれば、人類が一生かけても使い切れない」と考えていました。彼らはインターネットが今日のような規模に発展するとは全く予想していませんでした。現在、世界人口は80億人を超え、一人あたり少なくとも2〜3台のデバイスを持ち、IoTデバイスも爆発的に増加しています。当初、64ビットまたは128ビットのアドレス空間を採用していたら、今日のアドレス枯渇問題は起きなかったでしょう。
🏠 127.0.0.1の秘密
127.0.0.1(localhost)は単なる1つのアドレスではなく、127.0.0.0/8ブロック全体(約1600万個のアドレス)がループバックアドレスです。127.0.0.2や127.1.2.3など、この範囲内の任意のアドレスにpingを打っても、すべて自身のマシンに到達します。
⏰ IPv4アドレス枯渇のタイムライン
2011年2月3日、IANAが最後のIPv4アドレスブロックを割り当てました。2011年4月15日、アジア・パシフィック地域(APNIC)が枯渇。2012年9月、ヨーロッパ(RIPE NCC)が枯渇。2015年9月、北米(ARIN)が枯渇しました。
📏 最長のIPアドレス
IPv6アドレスは最大で39文字(8グループ、各グループ4桁の16進数と7つのコロン)で表すことができます。しかし、省略規則を使用すると、::1のように大幅に短縮できます。これはIPv6のループバックアドレスを表します。
🚀 IPアドレスとネットワーク速度は無関係です
多くの人が、IPアドレスを変更すればネットワーク速度が向上すると誤解していますが、実際にはIPアドレスはネットワーク上の「住所」にすぎず、速度は帯域幅、ルーティング、サーバーの状況などの要因によって決まり、IPアドレスそのものとは無関係です。
IPv6の特徴と利点・欠点
利点
- ✓ 膨大なアドレス空間:2¹²⁸個のアドレスを提供し、ほぼ無限です
- ✓ ルーティングの簡素化:階層的なアドレス構造により、ルーティングテーブルが小さくなります
- ✓ 自動設定:DHCP不要でSLAACをサポート
- ✓ より高いセキュリティ:IPsecを内蔵
- ✓ 優れたQoS:フローラベルフィールドによりリアルタイムアプリケーションを最適化
- ✓ NAT不要:各デバイスにパブリックIPが割り当てられます
- ✓ モビリティ対応:モバイルデバイスのサポートが向上
欠点
- ⚠ 互換性の問題:デバイスやネットワークの対応が必要です
- ⚠ 学習コスト:アドレス形式が複雑で覚えにくい
- ⚠ 移行コスト:デバイスやソフトウェアのアップグレードが必要です
- ⚠ デュアルスタック運用:移行期間中はIPv4とIPv6の両方を同時にサポートする必要があります
関連するIP情報照会サービス
本ツールは以下のAPIを活用してサービスを提供しており、以下に他の優れたIP照会サービスをご紹介します:
IP-API.com
このツールで使用 ⭐このツールで主に使用するAPIです。完全無料(商用目的を除く)、一括照会をサポートし、JSON/XML/CSV形式を提供します。制限:1分あたり45回。
IPapi.co
このツールで使用 ⭐このツールのバックアップAPIです。通貨、言語、接続タイプなどの追加情報を提供します。無料プランは月間30,000回のリクエストを許可します。
IPInfo.io
データが正確、APIが使いやすいIP情報、ASNデータ、地理情報、企業情報などを詳細に提供します。無料プラン(Free Plan)を提供しています。
IPGeolocation.io
機能が豊富IPの地理情報、タイムゾーン、通貨、天気情報などを提供します。無料プランは月間30,000回のリクエストを許可します。
MaxMind GeoIP2
最も正確、エンタープライズ級業界標準のIP地理情報データベースで、精度が非常に高いです。オフラインデータベースとオンラインAPIの両方を提供しています。
IPStack
セキュリティ検出IPv4およびIPv6をサポートし、プロキシ、VPN、Torの検出などのセキュリティモジュールを提供します。無料プランは月間100回のリクエストを許可します。
IPData.co
脅威インテリジェンス脅威インテリジェンス、ASN情報、企業データを提供します。無料プランは日間1,500回のリクエストを許可します。
Abstract API
使いやすい使いやすいIP地理情報APIです。無料プランは月間1,000回のリクエスト、制限は1秒あたり1回です。
IPRegistry
登録で10万回無料IP地理情報、企業情報、脅威検出、ユーザーのプロキシ解決を提供します。登録後、100,000回の無料クォータをプレゼントします。
DB-IP
オープンソースデータベース無料のIP地理情報データベースのダウンロードを提供し、オンライン照会サービスも利用できます。
IPify
パブリックIPの取得パブリックIPアドレスの取得に特化した、シンプルで高速、完全無料のサービスです。
プログラミングでIPアドレスを取得するには?
以下は、さまざまなプログラミング言語で訪問者のIPアドレスを取得するためのサンプルコードです:
Java (Spring Boot)
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
public class IpController {
@GetMapping('/ip')
public String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("CF-Connecting-IP");
if (ip == null || ip.isEmpty()) {
ip = request.getHeader("X-Forwarded-For");
if (ip != null) {
ip = ip.split(",")[0];
}
}
if (ip == null || ip.isEmpty()) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.isEmpty()) {
ip = request.getRemoteAddr();
}
return ip;
}
}
PHP
function getClientIp() {
$ipKeys = [
'HTTP_CF_CONNECTING_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_REAL_IP',
'REMOTE_ADDR'
];
foreach ($ipKeys as $key) {
if (!empty($_SERVER[$key])) {
$ips = explode(',', $_SERVER[$key]);
return trim($ips[0]);
}
}
return $_SERVER['REMOTE_ADDR'] ?? 'Unknown';
}
$ip = getClientIp();
echo "Your IP: " . $ip;
JavaScript (Node.js)
const express = require('express');
const app = express();
app.get('/ip', (req, res) => {
const ip = req.headers['cf-connecting-ip'] ||
req.headers['x-forwarded-for']?.split(',')[0] ||
req.headers['x-real-ip'] ||
req.socket.remoteAddress;
res.json({ ip: ip });
});
app.listen(3000);
Python (Flask)
from flask import Flask, request
app = Flask(__name__)
@app.route('/ip')
def get_ip():
ip = request.headers.get('CF-Connecting-IP') or \
request.headers.get('X-Forwarded-For', '').split(',')[0] or \
request.headers.get('X-Real-IP') or \
request.remote_addr
return {'ip': ip}
if __name__ == '__main__':
app.run()
Rust
use actix_web::{web, App, HttpRequest, HttpServer, Responder};
fn get_client_ip(req: &HttpRequest) -> String {
if let Some(ip) = req.headers().get("CF-Connecting-IP") {
return ip.to_str().unwrap_or("").to_string();
}
if let Some(forwarded) = req.headers().get("X-Forwarded-For") {
if let Ok(forwarded_str) = forwarded.to_str() {
if let Some(first_ip) = forwarded_str.split(',').next() {
return first_ip.trim().to_string();
}
}
}
if let Some(ip) = req.headers().get("X-Real-IP") {
return ip.to_str().unwrap_or("").to_string();
}
req.peer_addr()
.map(|addr| addr.ip().to_string())
.unwrap_or_else(|| "Unknown".to_string())
}
async fn ip_handler(req: HttpRequest) -> impl Responder {
let ip = get_client_ip(&req);
format!("Your IP: {}", ip)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().route("/ip", web::get().to(ip_handler))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
Go
package main
import (
"net/http"
"strings"
)
func getClientIP(r *http.Request) string {
if ip := r.Header.Get("CF-Connecting-IP"); ip != "" {
return ip
}
if forwarded := r.Header.Get("X-Forwarded-For"); forwarded != "" {
ips := strings.Split(forwarded, ",")
return strings.TrimSpace(ips[0])
}
if ip := r.Header.Get("X-Real-IP"); ip != "" {
return ip
}
return r.RemoteAddr
}
func handler(w http.ResponseWriter, r *http.Request) {
ip := getClientIP(r)
w.Write([]byte("Your IP: " + ip))
}
func main() {
http.HandleFunc("/ip", handler)
http.ListenAndServe(":8080", nil)
}
注意事项:
- • 注意:ウェブサイトがCDN(例:Cloudflare)やリバースプロキシ(例:Nginx)を使用している場合、実際のIPアドレスは特定のHTTPヘッダーから取得してください。
- • 優先順位:CF-Connecting-IP > X-Forwarded-For > X-Real-IP > RemoteAddr
- • X-Forwarded-For には複数のIPアドレス(カンマ区切り)が含まれる場合があり、最初のアドレスがクライアントの実際のIPです。
- • ブラウザ側のJavaScriptでは直接IPアドレスを取得できず、サードパーティAPIを呼び出す必要があります。