PHP | IP & Ülke & Sağlayıcı Banlama

PHP ile bir çok şey yapabilirsiniz ihtiyacınız olan biraz hayal gücü ve biraz da istek bu konumda PHP’yi kullanarak nasıl bir ülkeyi veya sağlayıcıyı sitenizden banlayabileceğinizi anlatacağım konumuza geçelim.

Bir kişinin hangi ülkede olduğunu yada hangi sağlayıcıdan servis aldığını öğrenebilmemiz için IP Adresine ihtiyacımız olucak kodumuzu yazmaya başlayalım

$adres = $_SERVER['REMOTE_ADDR'];

Normal bir sitede bu kod sorunsuz şekilde çalışacaktır fakat Cloudflare kullanan internet sitelerinde bu bilgi her zaman doğru olmayabiliyor o yüzden cloudflare’a bağlı bir siteniz mevcut ise bu kodu kullanınız.

function GetIP(){ 
if(getenv("HTTP_CLIENT_IP"))
{ 
$ip = getenv("HTTP_CLIENT_IP"); 
} 
elseif(getenv("HTTP_X_FORWARDED_FOR"))
{ 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
if (strstr($ip, ','))
{ 
$tmp = explode(',', $ip); 
$ip = trim($tmp[0]);
}
} 
else{ 
$ip = getenv("REMOTE_ADDR"); 
} 
return $ip; 
}

Adresi Sorunsuz şekilde aldığınızı varsayarak konumu anlatmaya devam ediyorum şimdi ki adım çok basit GET metotu ile IP adresimizi API çektiğimiz yere iletiyoruz ve verilerimizi çekiyoruz kodumuz.

$iphakkinda = @unserialize(file_get_contents('http://ip-api.com/php/'.$adres));

Verilerimizi İlettik şimdi gelen sonucu listeleyelim.

<?php 
print_r($iphakkinda); 
?>

Gelen Sonucu Listelediğimiz de önümüze şu çıktı geliyor

Array ( [status] => success [country] => Switzerland [countryCode] => CH [region] => ZH [regionName] => Zurich [city] => Zurich [zip] => 8152 [lat] => 47.43 [lon] => 8.5718 [timezone] => Europe/Zurich [isp] => Datacamp Limited [org] => Cdn77 ZUR Itx1 [as] => AS60068 Datacamp Limited [query] => 89.187.xxx.xx )

Bu kadar veriden bize lazım Olan Kısımlar [‘isp’] ve [‘country’] olucak verilerimizi nasıl çekicez bunada bakalım…

$iphakkinda['country']; $iphakkinda['country'];

Verilerimizi çektik Şimdi Sıra geldi Banlamaya ?

//IP Olarak Engellemek İçin
$bad = array("192.168.1.1", "192.168.1.2", "1.1.1.1");
//Ülke Olarak Engellemek İçin
$badc = array("Turkey","Switzerland");
//ISP olarak Engellemek için
$badi = array("Datacamp Limited","TTNet A.S.");

Sorgumuzu Yapalım

if (in_array($ulke, $badc)) 
{
header('HTTP/1.1 403 Forbidden');
}

İşlem bu kadar basit Kolay Gelsin..