본문 바로가기
Language/php

[PHP] 해외 ip 차단 (feat. IPinfo.io)

by pin9___9 2023. 10. 4.
728x90

 

회사에서 운영중인 서비스에 VPN인지 뭔지 해외 ip로 문의 메세지가 오는 것을 확인했습니다.

실재 문의보다 그런 홍보용 메일이 너무 자주 오니까 해외 ip를 차단해 달라는 요청이 들어왔습니다.

아오 홍보시치...

 

클라이언트 ip 가져오기

$ipAddress = $_SERVER['REMOTE_ADDR']; // 클라이언트의 IP 주소 가져오기

php에서 $_SERVER['REMOTE_ADDR']; 코드를 사용하면 클라이언트의 ip 주소를 가져올 수 있습니다!

자주 사용되는데 자꾸 까먹어서 추가했습니다 ㅎㅎ

 

IP 정보 조회하기

 

The trusted source for IP address data, leading IP data provider

Get accurate and reliable IP address information with IPinfo. Trusted by over 400,000 users, developers and businesses, we handle more than 40 billion API requests per month. Sign up for free account today.

ipinfo.io

해당 사이트에서 ip 정보를 json 형식으로 알려줍니다!! (월 50,000건까지)

{"hostname":"ns309932.ip-176-31-253.eu",
"city":"Lille",
"region":"Hauts-de-France",
"country":"FR",
"loc":"50.6330,3.0586",
"org":"AS16276 OVH SAS",
"postal":"59000",
"timezone":"Europe/Paris"}

이런식으로!! (위 ip 정보는 홍보시치 ip중 하나입니다... 💢)

 

회원가입을 하시거나 google, github 계정으로 로그인하시면 토큰을 발급 받습니다.

그 토큰을 사용해서 ip 정보를 조회할 수 있습니다.

 

cURL 코드

모듈을 다운받아서 사용할 수도 있지만 저는 cURL코드를 작성해서 사용할 것입니다.

// curl 초기화
$ch = curl_init();

// cURL 옵션 설정
curl_setopt($ch, CURLOPT_URL, "http://ipinfo.io/{$ipAddress}?token={$apiKey}"); // URL 지정하기
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 요청 결과를 문자열로 반환

// cURL 실행
$response = curl_exec($ch);

// cURL 오류 처리
if (curl_errno($ch)) {
    echo 'cURL 오류: ' . curl_error($ch);
}

// cURL 세션 종료
curl_close($ch);

// JSON 데이터를 배열로 변환
$ipInfo = json_decode($response, true);

// 국가 코드 확인
$countryCode = isset($ipInfo['country']) ? $ipInfo['country'] : '';

// 국가 코드가 'KR' (대한민국)이 아닌 경우 예외 처리
if ($countryCode !== 'KR') {
    // 다른 국가에 대한 예외 처리 코드를 추가하세요.
    echo "Access denied for your country.";
} else {
    // 대한민국 (KR)에 대한 처리 코드를 추가하세요.
    echo "Welcome to Korea!";
}

 

이렇게 코드를 짜면 대한민국일 경우 "Welcome to Korea!" 가 나타나고, 대한민국이 아닐경우 "Access denied for your country." 가 나타날 것입니다. ㅎㅎ

 

echo부분을 수정해서 서비스 실행 혹은 예외처리 함수를 넣어주시면 됩니다!!

728x90

댓글