개발자 미리보기

IP Lens HTTP API

현재 방문자의 연결 정보와 간단한 진단을 제공하는 소규모 JSON 엔드포인트입니다.

현재 IP 가져오기

GET /api/ip

서버에 도달한 주소, IP 버전, 프로토콜과 HTTPS 상태를 반환합니다. ?enrich=1을 추가하면 대략적인 네트워크 메타데이터를 요청할 수 있습니다.

curl "/api/ip"

IP 주소 조회

GET /api/ip-lookup?ip=8.8.8.8

공인 IPv4 또는 IPv6 주소만 허용하고 입력값을 검증합니다. 호출자별로 분당 30개 요청으로 제한합니다.

네트워크 징후 확인

GET /api/network-risk

캐시된 네트워크 메타데이터와 VPN, 프록시 또는 호스팅에 대한 보수적인 징후를 반환합니다. 결과에는 신뢰도가 포함되지만 증거로 간주해서는 안 됩니다.

상태 확인 및 인터넷 속도 테스트

GET /api/health는 데이터베이스와 저장소를 확인합니다. GET /api/ping은 지연 시간과 지터의 표본 측정에 사용합니다.

GET /api/speed?bytes=N은 정확한 Content-Length가 포함된 바이너리 application/octet-stream을 반환합니다. 숫자는 정수로 변환한 뒤 64 KB~8 MB(65,536~8,388,608바이트) 범위로 제한합니다. 값이 없거나 숫자가 아니면 기본값 262,144바이트를 사용합니다. 최근 10분의 이동 시간 창마다 60개 요청으로 제한합니다. 빠른 연결에서 전체 테스트를 실행하면 다운로드 샘플을 최대 3회 사용할 수 있습니다.

POST /api/speed-upload는 application/octet-stream만 허용하며 최대 4 MB(4,194,304바이트)입니다. 크기가 제한된 청크 단위로 읽고 JSON {"ok":true,"bytes":N}을 반환합니다. 최근 10분의 이동 시간 창마다 10개 요청으로 제한합니다. 다운로드와 업로드는 호출자의 IP에서 생성한 별도의 HMAC 키를 사용합니다.

잘못된 메서드는 HTTP 405, 지원하지 않는 업로드 콘텐츠 유형은 415, 너무 큰 업로드는 413, 요청 제한 초과는 429를 반환합니다. 응답에는 Cache-Control: private, no-store, max-age=0 및 X-Content-Type-Options: nosniff가 적용됩니다.

사용자가 시작한 적응형 테스트 한 번은 헤더와 ping 응답을 제외하고 최대 약 15.25 MiB를 전송합니다. 결과는 IP Lens 서버까지의 경로를 측정하며 ISP의 광고 속도보다 낮을 수 있고 요금제 속도를 인증하지 않습니다. 전송 데이터는 일시적으로 처리하며 데이터나 결과를 데이터베이스, 분석 데이터, 캐시 또는 애플리케이션 관리 로그에 저장하지 않습니다. 남용 방지를 위해 만료되는 HMAC 요청 제한 기록만 저장합니다.

비공개 집계 통계

GET /api/stats/summary?days=30

config.php의 관리자 사용자 이름과 비밀번호로 HTTP Basic Auth를 사용하세요. 결과에는 전체 조회 수, 사람 방문자-일 수, 조회한 페이지 수, 봇 조회 수와 비율, 봇 계열/분류, 일별 및 URL별 사람/봇 통계가 포함됩니다. 상위 국가, 브라우저, 운영체제, 기기, 언어, 유입 출처는 사람의 트래픽만 나타냅니다. 최근 활동은 마스킹된 방문자/기기 정보 또는 정규화된 봇 식별 정보로 제한하며, 방문한 페이지 경로, 전체 IP, 전체 User-Agent 또는 방문자 키는 포함하지 않습니다.

대략적인 위치의 날씨

GET /api/weather?lang=ko

서버에서 WeatherAPI.com을 활성화하고 설정한 경우 IP 기반의 대략적인 위치에 대한 현재 날씨를 반환합니다.

JavaScript 예제

fetch('/api/ip-lookup?ip=8.8.8.8')
  .then(function (response) { return response.json(); })
  .then(function (data) { console.log(data.ip, data.network); });