📖
특정 IP가 국내 IP 인지 확인하는 함수 (34Kb 로 국내 모든 IP를 함수에 내장)

페이지 정보

본문

🚀 check_kr_ip.php[code]<?php
/*
특정 IP가 국내 IP 인지 확인하는 함수
작성 : 2025-05-15 김성대
한국인터넷정보센터.한국/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp?nationCode1=KR
에서 2025년5월 현재 전체국가 IP 리스트 중 한국만 뽑아서 문자열로 저장 (대략 2200개 정도됨)
192.* 172.* 공유기 IP도 포함
속도개선을 위해 이미 확인된경우는 session에 넣어두고 체크 하지 않음

테스트
$ip = "104.8.230.50";
$ip=$_SERVER['REMOTE_ADDR'];
$ret=is_ip_in_kr($ip);
echo "한국 IP 확인 결과 $ip : $ret<BR>";
*/
if (get_session('is_ip_in_kr'));
else if (is_ip_in_kr($_SERVER['REMOTE_ADDR']))
set_session('is_ip_in_kr',true);
else
die("This service is currently limited to users in Korea. (한국에서만 접속 가능합니다.)");


/**
 * 특정 IP가 지정된 서브넷 범위 내에 있는지 확인하는 함수
 *
 * @param string $ip 검사할 IP 주소
 * @param string $subnet 서브넷의 시작 IP 주소
 * @param int $cidr 서브넷 마스크 (CIDR 값)
 * @return bool 해당 IP가 서브넷 범위 내에 있으면 true, 아니면 false
 */
function is_ip_in_subnet($ip, $subnet, $cidr) {
    // 시작 IP 주소를 정수로 변환
    $firstIp = ip2long($subnet);
//echo "$ip,$subnet,$cidr,<BR>";

    // 서브넷 마스크를 기반으로 마지막 IP 주소 계산
    $lastIp = $firstIp + (1 << (32 - $cidr)) - 1;

    // 입력받은 IP 주소를 정수로 변환 후 범위 비교
    $ipLong = ip2long($ip);
    return $ipLong >= $firstIp && $ipLong <= $lastIp;
}

//2025-05-15 현재 국내 IP 현황
// 127. ... 172... 는 공유기 내부 ip
function is_ip_in_kr($ip) {
$arr_ip=explode("\n","
127.0.0/16
172.30.1/16
14.128.128/17
.... 첨부된 소스에 전체 데이터 있음
103.218.172/23
157.66.64/23
160.187.186/23
163.223.94/23
");

foreach($arr_ip as $buff) {
$arr=explode("/",trim($buff));
if ($arr[0] && is_ip_in_subnet($ip, $arr[0].'.0', $arr[1])) {
return true;
}
}
return false;
}[/code]

댓글목록

등록된 댓글이 없습니다.


자료 목록
번호 제목 날짜
199
🫧
05-23
198
🫧
05-23
📖
🫧
05-23
196
🫧
05-23
195
🫧
05-22
194
🫧
05-22
193
🫧
05-22
192
🫧
05-22
191
🫧
05-21
190
🫧
05-16
189
🫧
05-15
188
🫧
05-14
187
🫧
05-11
186
🫧
05-10
185
🫧
05-10

🔍 검색

회사소개 개인정보처리방침 서비스이용약관
Copyright © rainbowgarden.shop All rights reserved.