Hangi IP hangi ülkeye ait

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

Hangi IP hangi ülkeye ait

Mesaj gönderen ahmetax »

Merhaba,
Elimdeki bazı IP numaralarının (web sitelerime sık uğrayan numaralar) hangi ülkelere ait olduğunu bulmak istiyorum.
Bunu manuel olarak yapmak oldukça yorucu.
IP numaralarının hangi ülkelere ait olduğunu sorgulayacağım basit bir sistem var mı?
Yaptığım araştırmalarda geoip konusu öne çıkıyor.
Delphide kullanabileceğim ücretsiz geoip veritabanları bulabilir miyim?
Bu konuyla daha önce ilgilenmiş arkadaşların önerisi ne olur?
Teşekkürler. İyi çalışmalar.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Hangi IP hangi ülkeye ait

Mesaj gönderen warder »

Yazacağınız bir proje için kaynak mı soruyorsunuz yoksa zaten yazılmış bir tavsiye mi anlayamadım?
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

Re: Hangi IP hangi ülkeye ait

Mesaj gönderen ahmetax »

warder yazdı:Yazacağınız bir proje için kaynak mı soruyorsunuz yoksa zaten yazılmış bir tavsiye mi anlayamadım?
İkisi de olabilir.
Açık kaynak hazır bir çözüm varsa, kullanabilirim elbette.
Eğer çözümü kendim üretmek zorunda kalırsam, yardımcı kaynaklara ve mümkünse bu konuda deneyim sahibi kişilerin yönlendirmelerine ihtiyacım var.
Bu tür konulara yeni girdiğim için, bilgilerim de mozayik gibi parçalı.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Hangi IP hangi ülkeye ait

Mesaj gönderen warder »

Zorlu bir çözümü yok. Bir projemde TR ip adreslerini bir kaç ayda bir güncelliyorum öyle kullanıyorlar.
Size kendi kullanımımı ve ip adreslerinin en güncel kaynak adresini vereyim gerisi gelecektir.
Tabi bu adreslerin dünyadaki ip adresi haritalamasıyla ilgili bölgelerden sadece birisi olduğu unutulmamalıdır.
Resim

Bizimde içinde bulunduğumuz bölgeye ripe bakıyor. Size ripe bilgilerini veriyorum.

ip blokları en güncel adresi (adresin farklı dizinlerinde aynı dosyayı tarihsel kategoriye göre bulabilirsiniz.):

Kod: Tümünü seç

ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
Hangi ip bloğu kime ait:

Kod: Tümünü seç

ftp://ftp.ripe.net/pub/stats/ripencc/membership/
Önce de belirttiğim gibi bu bilgilerden sadece güncel TR ip adreslerini ayıklayıp kullanıyorum. Siz tümünü kullanabilirsiniz.
Dosyadaki veri formatı:

Kod: Tümünü seç

ripencc|TR|ipv4|5.2.80.0|2048|20120501|allocated

ripencc -> yönetsel kurum (dünya haritalamasından bahsetmiştim)
TR -> ülke kodu
ipv4 -> ip adres formatı
5.2.80.0 -> ip blok başlangıcı
2048 -> blokta kaç adet ip var
20120201 -> kullanıma açıldığı tarih
allocated -> assigned olana kadar dosyadan okunabilir. 
assigned kısmı henüz kullanılmayan grup dosyada 51000. satır civarında başlıyor.
Formattan da kolayca görülebileceği gibi tam bir TStringList->Delimiter = '|'; durumu var.
Ben format açıklamasında belirttiğim ip blok başıngıcından adet kadar ip üretip karşılaştırma kolaylığı olması açısından unsigned long türüne çeviriyorum.
Sonra önceden hazırladığım aralıklarla karşılaştırıp kullanıyorum.
Bir (SQLite3) db olarak da değerlendirilebilir.
Normal bir programda kullansaydım öyle yapardım.
Hızlı çalışması gereken bir programda kullandığım için RAM da yüklü olmasını tercih ettim.

Kod: Tümünü seç

//---------------------------------------------------------------------------
unsigned long ThKanal::IpToInt(UnicodeString usIpAdres)
{
	TStringList * sList = new TStringList;
	sList->Delimiter = '.';
	sList->StrictDelimiter = true;
	sList->DelimitedText = usIpAdres;
	return ((sList->Strings[0].ToInt() * 256 * 256 * 256) +
		   (sList->Strings[1].ToInt() * 256 * 256) +
		   (sList->Strings[2].ToInt() * 256) +
		   (sList->Strings[3].ToInt()));
}
//---------------------------------------------------------------------------
bool ThKanal::IpYerlimi(UnicodeString usIpAdres)
{  //108-723 satır arası
	unsigned long iIp = IpToInt(usIpAdres);
     if((iIp >= 100331520) && (iIp <= 100335615)) { return true; }
else if((iIp >= 100597760) && (iIp <= 100614143)) { return true; }
else if((iIp >= 1042087936) && (iIp <= 1042120703)) { return true; }
......
Delphicesi size kalmış.
Linkler dahil alıntı değildir...
Kolay gelsin...
En son warder tarafından 27 Ara 2014 08:43 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

Re: Hangi IP hangi ülkeye ait

Mesaj gönderen ahmetax »

Merhaba warder,
Verdiğin bilgiler için çok teşekkür ediyorum.
Ben bu bilgileri şimdilik sadece kendi bilgisayarımda kullanacağım. Belki yerel mysql üzerine aktarırım.
Ancak düşündüğüm çalışmada hız hiç önemli değil. O yüzden sadece text search bile yeterli olabilir.
Ama önce mekanizmayı kavramam gerekecek.
Başlangıç için çok güzel bir kaynak. Tekrar teşekkür ediyorum.
İyi çalışmalar.
Cevapla