📖
특정 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]
/*
특정 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]
관련링크
-
링크 연결 및 다운로드
1회 연결
댓글목록
등록된 댓글이 없습니다.
![]() ![]() |