Başlık her ne kadar sonundaki gülücük nedeniyle sevimli gibi görünse de bir üyemizin yaşadığı hadise, canımı çok sıkmıştı. Çözüme kavuşturunca yazmanın da blog yazan diğer arkadaşlarım için faydalı olacağını düşündüm. Bu arada site sahipleri dışındaki okurlarımız yazının devamını okuyarak lütfen kendilerine eziyet etmesinler. deSenblog’a yeni katılmış ama yazılarını okudukça keşke daha erken gelseymiş dediğimiz ince ruhlu bir ablamızdan gelen iletişim talebi sonrasında yabancı bir ülkeden türüne ender rastlanır bir dallama(pardon) tarafından rahatsız edildiğini öğrendik. Meğer bizim abla nereye bu da oraya; böyle biri önde diğeri arkada gezer dururlarmış…Antoloji.com gibi bir sitede çok kalabalık bir kitleye yazmasına rağmen site yönetiminin mevzubahis dengesizle başa çıkamaması sonucunda ablamız da kutsal topraklara; desenblog’a katılmış :) Diğer sitelerde çözüm bulamayınca mail ile gönderdiği içli serzeniş sonrasında gerçekten bir yardım etme isteği hasıl oldu ama Site panellerinden gelen-giden ziyaretçiyi takip edip banlamakla olacak iş değildi bu. Üstesinden gelemeyeceğimiz bir iş olduğunu yazıp hemen yanıtlamak vvardı ama didikledikçe önce bizim yeni yetmelerin 2 satırlık kodları(!) sonrasında da işin bilimsel boyutuna ulaştım.

Önceleri ip sorgulatırken Elazığ’da olmamıza rağmen Diyarbakır omurgasını gösteren uygulamalar geldi aklıma. Sonuçları hep yanlış çıkan bu inatçı web uygulamaları bile başarısız ise ben ne yapabilirim dedim ve içimden yavaş yavaş üzülmeye başladım. E sonra Türkiye’den uzak diyarlara açıldığım dakikalar geldi aklıma. Şöyle demez mi hep sağ alt köşede: “Elazığ’dan Semra oturum açtı, Sizinle fingirdeşmek istiyor :*” Tövbe tövbe…Warez nedeniyle sürekli gezindiğim Rus menşeli siteleri ve bu alt köşelerdeki minik bildirimleri hatırlayınca ülkenin tespiti varsa engel yolu da vardır dedim kendi kendime.

Gelelim yazının özüne…5 Tip ip adresinin belirlenmesi gibi(A,B,C,D ve E) ülkelerin de belirlenebilmesi için ip adresinin her 3’lü katar’ı dizi işlemlerine tabi tutularak mevcut ülkelerin ip aralıklarıyla karşılaştırılıyor. Bu arada şunu da söylemek lazım ki ip aralıklarının bir metin dosyasını dolduracak fazlalığı nedeniyle(yaklaşık 2Mb) acemice yapılacak bir kodlamayla ülke tespiti mümkün değil. Ancak sitenin verdiği yöntemle ziyaretçinizin ülkesini görüntüleyebiliyor ve istemedikleriniz için yönlendirme yapabiliyorsunuz. Şöyle ki:

//Ziyaretçimizin IP adresi
$IPaddress=$_SERVER['REMOTE_ADDR'];

//Ülkelerin adını 2 ya da 3 harfli kodlarla parse ediyoruz. Seçim sizin.
$two_letter_country_code=iptocountry($IPaddress);

//Ziyaretçi ve ip veritabanımızla karşılaştırma yapacak olan scriptin adresini belirtiyoruz. Bu arada tüm ülkelerin tespiti için 255 adet dosyamız var.
include("*****/ip_files/countries.php");
//3 haneli ülke kodumuz
$three_letter_country_code=$countries[ $two_letter_country_code][0];

//Ülke adını ingilizce olarak parse etmek isterseniz kullanabilirsiniz.
$country_name=$countries[$two_letter_country_code][1];

//2 haneli ülke kodumuz
$ulke=$two_letter_country_code;

//Sonucu kontrol etmek amacıyla Parse etmek isterseniz, benim slash eklediğim alttaki 2 satırı kaldırabilirsiniz. Sonuca göre yönlendirmeyi zaten aşağıda yapacağız.
echo "<br>3 Harfli kod: $three_letter_country_code";
echo "<br>Ülke: $country_name<br>";

//Evet, bizim dengesiz Hollanda'dan geldiği için kontrol amaçlı beklediğim kısaltmayı;NL'yi ve yönlenmesini istediğim site adresini belirttim.

Tam bu noktada istenmeyen misafirimize bir de süpriz yapalım:

if($ulke=="NL"){
//Tabi böyle bi adres olmadığı için siteden kovduğunuz arkadaş, Google karşısında hassie sorgusu çıkınca "Hassie'de ne ola ki?" diye soracaktır kendi kendine :))))))))
header("Location: http://www.hassiiiiiiiiiiiiiiiiiiiiieeeeee.com");
}

Bundan sonrası da müdahale etmeyeceğimiz ülke tespit fonksiyonu:

//Ülke tespiti için gerekli olan, ip'yi ülkeye çeviren fonksiyonumuz
function iptocountry($ip) {
$numbers = preg_split( "/\./", $ip);
include("*****/ip_files/".$numbers[0].".php");
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);
foreach($ranges as $key => $value){
if($key<=$code){
if($ranges[$key][0]>=$code){$two_letter_country_code=$ranges[$key][1];break;}
}
}

if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
return $two_letter_country_code;
}

Evet, bu kodlar işlemleri yürütmek istediğiniz phpdosyasında olmalı. IP tespiti için gerekli veritabanı dosyasını buradan ulaşabilirsiniz. Benim gibi merakınız varsa ülkeler için özel veritabanlarına ya da farklı uygulamalara da buradan ulaşabilirsiniz. Faydalı olması dileğiyle…