설치
pip install requests
기본 조회
import requests
def get_ip_info(ip: str = None) -> dict:
url = "https://ipinfo.im/api/"
params = {"ip": ip} if ip else {}
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
return response.json()
# 내 IP 조회
my_info = get_ip_info()
print(f"IP: {my_info['ip']}")
print(f"도시: {my_info.get('city')}, {my_info.get('country')}")
# 특정 IP 조회
info = get_ip_info("8.8.8.8")
print(f"8.8.8.8 ISP: {info['org']}")
오류 처리 포함 완전판
import requests
from typing import Optional
class IPInfoClient:
BASE_URL = "https://ipinfo.im/api/"
def __init__(self, timeout: int = 10):
self.timeout = timeout
self.session = requests.Session()
def lookup(self, ip: Optional[str] = None) -> Optional[dict]:
try:
params = {"ip": ip} if ip else {}
resp = self.session.get(self.BASE_URL, params=params, timeout=self.timeout)
resp.raise_for_status()
return resp.json()
except requests.exceptions.Timeout:
print(f"요청 타임아웃: {ip}")
except requests.exceptions.RequestException as e:
print(f"요청 실패: {e}")
return None
client = IPInfoClient()
info = client.lookup("1.1.1.1")
if info:
print(f"1.1.1.1 → {info['country']} / {info.get('org')}")
일괄 조회
import time
def batch_lookup(ips, delay=0.1):
results = {}
for ip in ips:
try:
resp = requests.get("https://ipinfo.im/api/", params={"ip": ip}, timeout=10)
results[ip] = resp.json()
except Exception as e:
results[ip] = {"error": str(e)}
time.sleep(delay)
return results
ips = ["8.8.8.8", "1.1.1.1", "168.126.63.1"]
for ip, info in batch_lookup(ips).items():
print(f"{ip:20} → {info.get('country')} | {info.get('org')}")
지금 바로 → ipinfo.im