IP 정보 조회
IP 주소의 지리 위치, ISP, ASN 등 상세 정보를 조회합니다
자주 묻는 질문
IP 주소 위치 추적은 정확한가요?
IP 지리 위치는 일반적으로 도시 수준까지 정확하며, 오차는 수십에서 수백 킬로미터일 수 있습니다. IP 주소로는 구체적인 거리나 주소를 식별할 수 없습니다.
왜 내 IP 주소가 변경되나요?
대부분의 가정용 브로드밴드는 동적 IP 할당(DHCP)을 사용하며, 제공업체가 주기적으로 IP 주소를 변경합니다. 기업 또는 서버는 일반적으로 고정 IP(정적 IP)를 사용합니다.
내 진짜 IP를 숨기려면 어떻게 해야 하나요?
VPN, 프록시 서버 또는 Tor 네트워크를 사용하여 진짜 IP를 숨길 수 있습니다. 그러나 이러한 서비스는 네트워크 속도에 영향을 줄 수 있고 일부 웹사이트 접근을 제한할 수 있습니다.
왜 두 개의 IP 주소가 있나요?
IPv4 및 IPv6 주소를 동시에 보유하고 있을 수 있습니다. 현대 네트워크는 IPv4에서 IPv6로 전환 중이며, 많은 장치가 두 프로토콜을 모두 지원합니다.
IPv4 vs IPv6: 왜 IPv6가 필요한가요?
IPv4 (1981년)
형식: 4개의 십진수 그룹 (예: 192.168.1.1)
총 수: 약 43억 개 주소 (2³² = 4,294,967,296)
문제: 주소가 거의 고갈되었습니다. 2011년에 이미 할당이 완료되었습니다
길이: 32비트
IPv6 (1998년)
형식: 8개의 16진수 그룹 (예: 2001:0db8::1)
총 수: 약 340조조조조개의 주소 (2¹²⁸)
장점: 주소 수가 거의 무한하며, 지구상의 모든 모래알 하나하나에 할당할 수 있을 정도입니다
길이: 128비트
왜 IPv4는 부족한가요?
- • 전 세계 인구는 80억 명이며, 각 사람당 최소 2~3대의 기기(스마트폰, 컴퓨터, 태블릿)를 사용합니다
- • 사물인터넷(IoT) 기기의 폭발적 증가(스마트 홈, 자동차, 웨어러블 기기)
- • 기업 및 데이터센터가 방대한 IP 주소를 필요로 합니다
- • 초기 할당이 부적절했음 (예: MIT가 1600만 개의 IP를 보유)
특수 IP 주소 범위
루프백 주소(Loopback)
127.0.0.0/8 (127.0.0.1 - 127.255.255.255)
로컬 호스트 테스트용으로 사용되며, 데이터는 네트워크로 전송되지 않습니다. 일반적으로 127.0.0.1이 localhost를 나타냅니다
용도: 로컬 서비스 테스트, 개발 및 디버깅
사내 주소(Private)
- 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 서버가 사용 불가능할 때 시스템이 자동으로 할당하는 임시 주소
용도: 자동 구성 (네트워크 설정 실패를 나타냄)
멀티캐스트 주소(Multicast)
224.0.0.0/4 (224.0.0.0 - 239.255.255.255)
일대다 통신에 사용되며, 예: 비디오 스트리밍, 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(한 대학)는 1600만 개의 IP(전체 18.0.0.0/8)를 보유했고, 애플은 1600만 개의 IP(17.0.0.0/8)를 보유했습니다. 반면 중국 전체에는 약 3.3억 개의 IP만 할당되었고, 이는 약 10억 명의 인터넷 사용자를 서비스해야 했습니다—인당 2대의 장치를 가정할 경우 최소 20억 개의 IP가 필요합니다. 이러한 불균형한 할당으로 인해 중국은 NAT 기술을 대량으로 사용하여 IP를 공유해야 했습니다.
🚫 IP 블랙리스트
전 세계에는 Spamhaus 같은 여러 IP 블랙리스트 데이터베이스가 존재하며, 스팸 메일, 악성 소프트웨어, DDoS 공격 등의 출처 IP를 표시합니다. IP가 블랙리스트에 등록되면 이메일이 거부되거나 웹사이트가 차단될 수 있습니다.
🤯 IP 위치 정보의 기이한 사례
미국 캔자스주 한 가정은 MaxMind 사의 IP 데이터베이스에서 기본 위치(위도 38°N, 경도 97°W, 미국 지리적 중심)로 설정되어 수백만 개의 정확한 위치를 찾지 못한 IP 주소가 모두 이곳을 가리키게 되었습니다. 이 가정은 갑작스럽게 "미국 전역의 해커 거점"이 되어 FBI, 경찰, 채권자, 사기 피해자들로부터 수많은 전화와 방문을 받았고, 심지어 밤중에 문을 부수고 들어오는 사건까지 발생했습니다. 2016년 이 가정은 MaxMind를 소송했고, 결국 배상금을 받았습니다.
💸 IPv4 주소는 매매 가능합니다
IPv4 주소 고갈로 인해 IP 주소는 거래 가능한 상품이 되었습니다. 암시장에서는 개당 40달러까지 올랐습니다. 2011년 마이크로소프트는 파산한 노텔사로부터 66.6만 개의 IP 주소를 750만 달러에 구매했으며, 평균 개당 약 11.25달러였습니다. 2014년 아마존, 마이크로소프트 등 기술 기업들은 IPv4 주소를 사재기하며 가격이 급등했습니다.
🤦 IPv4 설계자들의 "실수"
1981년 IPv4 설계자들은 "42억 개의 주소면 인류가 평생 동안 쓰기 충분할 것"이라고 생각했습니다. 그들은 인터넷이 오늘날과 같은 규모로 성장할 것이라고 전혀 예상하지 못했습니다. 전 세계 80억 인구 각각이 최소 2~3대의 장치를 사용하고, 사물인터넷 장치가 폭발적으로 증가하고 있습니다. 만약当初 64비트 또는 128비트로 설계했다면 오늘날 주소 고갈 문제는 발생하지 않았을 것입니다.
🏠 127.0.0.1의 비밀
127.0.0.1(localhost)은 단순한 주소가 아닙니다. 전체 127.0.0.0/8 범위(약 1600만 개의 주소)가 모두 루프백 주소입니다. 127.0.0.2, 127.1.2.3 등 어떤 주소든 펑크해도 모두 본 기기로 연결됩니다.
⏰ 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 형식 제공. 제한: 분당 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회 제한.
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가 클라이언트의 진짜 IP입니다.
- • 브라우저의 JavaScript는 직접 IP 주소를 가져올 수 없으며, 제3자 API를 호출해야 합니다.