현재 IP 가져오기
GET /api/ip
서버에 도달한 주소, IP 버전, 프로토콜과 HTTPS 상태를 반환합니다. ?enrich=1을 추가하면 대략적인 네트워크 메타데이터를 요청할 수 있습니다.
curl "/api/ip" 개발자 미리보기
현재 방문자의 연결 정보와 간단한 진단을 제공하는 소규모 JSON 엔드포인트입니다.
GET /api/ip
서버에 도달한 주소, IP 버전, 프로토콜과 HTTPS 상태를 반환합니다. ?enrich=1을 추가하면 대략적인 네트워크 메타데이터를 요청할 수 있습니다.
curl "/api/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 기반의 대략적인 위치에 대한 현재 날씨를 반환합니다.
fetch('/api/ip-lookup?ip=8.8.8.8')
.then(function (response) { return response.json(); })
.then(function (data) { console.log(data.ip, data.network); });