Galibarda

Veysel Bozdoğanoğlu

php ip whois sorgulama

without comments

php ile bir ip nin whois sorgusunu yapıp kayıtları şu şekilde çekebiliriz.

öncelikler sorgu yapacağımız serverlar

$serversIp[1]['address'] = "whois.ripe.net";
$serversIp[1]['free'] = "ALLOCATED UNSPECIFIED";
$serversIp[1]['param'] = "-B ";

$serversIp[2]['address'] = "whois.arin.net";
$serversIp[2]['free'] = "These addresses have been further";
$serversIp[2]['param'] = "n ";

$serversIp[3]['address'] = "whois.apnic.net";
$serversIp[3]['free'] = "allocated";
$serversIp[3]['param'] = "";

$serversIp[4]['address'] = "whois.afrinic.net";
$serversIp[4]['free'] = "ALLOCATED UNSPECIFIED";
$serversIp[4]['param'] = "";

$serversIp[0]['address'] = "whois.lacnic.net";
$serversIp[0]['free'] = "No match";
$serversIp[0]['param'] = "";

$serversIp dizisinin address anahtarı sorgu yapılacak
server ı belirtiyor. her serverın sorumlu olduğu bir kıta var
Bunlar şu şekilde

AFRINIC = Africa
APNIC = Asia / AU / NZ
ARIN = USA / Canada
LACNIC = Latin America / Caribbean
RIPE = Europe / Africa / Middle East*/

$serversIp dizisinin free anahtarı ise serverdan gelen sonuçlarda arayacağımız kelimeyi belirtiyor.
Yani ip adresine whois.ripe.net serverına soracağız dönen sonuçlar içinde ALLOCATED UNSPECIFIED kelimesi varsa sonuç bulunmamıştır deyip
diğer servera soracağız..

$serversIp dizisinin param anahtarı ise sorgu yapılacak ip nin önüne eklenecek etiket. Bazı serverlarda ipnin önüne bu etiket eklemek zorunlu bazılarında ise değil.

Öncelikle Whois Sorgusunu yapacak fonksiyonu yazalım

function getWhoisData($test_server, $test_domain) {
$msg = “”;
$connection = @fsockopen($test_server, 43, $errno, $errstr, 10);
if (!$connection) {
return false;
} else {
//sleep(1);
fputs($connection, $test_domain.”\r\n”);
while (!feof($connection)) {
$msg[] = fgets($connection, 4096);
}
fclose($connection);
}
return $msg;
}

bu fonksiyon servera ip adresini sorar ve sonucu bir dizi olarak döndürü.r
şimdide bütün serverları tek tek sorgulayacak fonksiyonu yazalım.

  function IpQuery($ip){
  global $serversIp;
  
  $result = array();
  
  foreach ($serversIp as $key  => $value){ 
   echo ‘<hr>’  . $serversIp[$key]['address'] . ‘ – için sorgu geldi <br>’;
   
   $result = getWhoisData($serversIp[$key]['address'], $serversIp[$key]['param'].$ip);
   $sonuc = ‘var’;
   
   foreach ($result as $val) {         
    if ( preg_match(‘/’.$serversIp[$key]['free'].’/i’, $val) ){     
     echo ‘<br><b>’.$serversIp[$key]['address'] . ‘ de Sonuc Yok</b><br>’;
     $sonuc=’yok’;
     break;    
    }
   }
   if($sonuc ==’var’){
    echo ‘<b> Bu adreste var ‘ . $serversIp[$key]['address'] .’</b>’;
    return $result;
   }
  } 
}

 

IpQuery(’184.168.230.128′);

Bu fonksiyonu halen yapımıyla uğraştığım sitekimeait.com sitemde kullanacağım tabi bunu bir class içinde daha düzenli bir haliyle kullanıyorum.. Tam olarak bittiğinde tüm dosyayı buraya ekleyeceğim..

Aslında yapılan işlemin daha kısa versiyonu var mı diye de araştırıyorum. Yani girilen ip nin tanım aralığına
göre doğrudan hangi server a sorulacağını bulup daha sonra sadece tek bir server a sormak daha mantıklı ancak
yukarda yazdığım kıtaların ip aralıklarını henuz bulabilmiş değilim. Bu yüzden şimdilik her servera tek tek sormak işimizi görüyor..

Written by waycell

Ocak 25th, 2012 at 12:56 pm

Posted in PHP

Leave a Reply