한국 IP가 아니면 차단 하는 extend (국내 모든 IP 내장) 정보
한국 IP가 아니면 차단 하는 extend (국내 모든 IP 내장)
관련링크
첨부파일
본문
그누보드 extend 폴더에 넣어두면 국내IP만 접속가능하게 됩니다. 2025년 5월 국내 IP 기준
국내IP 추출하는 방법은 링크 참고
https://cmdkr.tistory.com/entry/전체국가-IP-리스트중-한국-IP만-문자열로-저장하는-소스-대략-2200개-정도됨
<?php
/*
특정 IP가 국내 IP 인지 확인하는 함수
작성 : 2025-05-15 김성대
한국인터넷정보센터.한국/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp?nationCode1=KR
에서 2025년5월 현재 전체국가 IP 리스트 중 한국만 뽑아서 문자열로 저장 (대략 2200개 정도됨)
192.* 172.* 공유기 IP도 포함
테스트
$ip = "104.8.230.50";
$ip=$_SERVER['REMOTE_ADDR'];
$ret=is_ip_in_kr($ip);
echo "한국 IP 확인 결과 $ip : $ret<BR>";
*/
if (!is_ip_in_kr($_SERVER['REMOTE_ADDR'])) {
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
14.129.0/16
45.112.88/21
.... (소스에는 전체 데이터 있음)
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;
}
6
댓글 8개

감사합니다 ^^
선생님 이 파일 하나만 저 폴더에 넣으면 알아서 적용되는거에요 ? 그럼 한국인만 사이트에 접속되는거지요 ?

@ploki0911 네 그렇습니다. 한국으로 등록된 IP만 가능합니다.
그외 지역 IP은 한국인터넷정보센터 에서 받아서 파일에 추가하시면 그 지역도 허용 됩니다.

감사합니다..잘 사용하겠습니다.
그리고 구글애드센스나 구글애널리틱스 등
구글 제품 해외 ip는 제외하는 옵션이 있었으면 좋겠습니다

@아론다론 구글 봇 IP 리스트를 파일에 추가하시면 됩니다.

감사합니다. 역으로 특정지역 아이피만 차단하려면 어떻게 해야 할까요?
적용했습니다
아주 쉽게 적용 가능하고
쉽게 ip 추가 가능하니 넘 좋습니다

감사합니다. 잘 사용하겠습니다.