Güvenlik PHP

API Kullanarak PHP ile IP Sorgulama

Php Ip Sorgulama
Yazar : Burak Demir

Php ile geliştirdiğiniz uygulamada sitenizi ziyaret eden kullanıcılar, beğeni yapan kullanıcılar veya yorum yapan kullanıcıların ip adreslerini güvenlik açısından kayıt altında tutmak isteyebilirsiniz. Doğrusu da Ip adreslerini kayıt altında tutmaktır. Uygulamanız aracılıgıyla gelen hakaret,uygulamanıza gelen saldırılar, hatalı giriş denemeleri gibi durumlarda ip adreslerini kayıt altında tutmak size çok büyük kolaylık sağlayacaktır. Çünkü yasal bir süreçte bu kayıtlarla karşıdaki kişi hakkında gerekli adli işlemler yapılabilmektedir. Bu yazıda Php ile IP sorgulama üzerinde duracağım.

Php ile IP sorgulama

Php ile Ip sorgulama işlemi yapılırken sadece ip adresi değil daha fazla detaylara ulaşmak isteyebilrsiniz. Uygulamanızı kullanan kullanıcıların lokasyonlarına, servis sağlayıcıları gibi bilgilere Ip adresi sayesinde ulaşabilirsiniz. Bu yazımda hem Php ile ip ip sorgulama ve ip üzerinden kişinin bazı bilgilerinize nasıl ulaşabileceğinize dair bir uygulama geliştireceğim. Bu metod sayesinde kullanıcın ip adresine, lokasyonuna, servis sağlayıcısına,ülkesine ve konumuna ipinfo.io API kullanarak ulaşabileceksiniz. Php ile IP sorgulama metoduna ait php dosyasına ve örnek uygulama dosyasına yazı sonunda belirttiğim Github hesabından ulaşabilirsiniz.

Php ile Ip Sorgulama Uygulama

İlk uygulamamızda ip adresini php ile aldırıp ipinfo.io üzerinde sorgulatarak ip adres detaylarına ulaşıyorum. Metodumuza ip adresini parametre olarak gönderirseniz ise o ip adresinin bilgilerine ipinfo.io ile ulaşıyoruz. Sonuç olarak bize detayları döndürüyor.

function ipAdresiAl($ip = null){

        //Eğer ip adresini boş gönderilmişse ip adresini al.
        if($ip == null){
            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");
            }
        }
        
        //ip adres bilgilerini almak için ipinfo.io ya ip adresini sorgulat.
        $json = file_get_contents("http://ipinfo.io/{$ip}");
        //dönen sonucu detaylar değişkenine decode ederek aktar.
        $detaylar = json_decode($json);
        //Sonucları metodun sonunda return et.
        return $detaylar;
}

İkinci uygulamamızda ise metodumuza parametre göndermeden ip adresini ipinfo.io aracılığıyla alıyorum ve detayları döndürüyorum.

function ipAdresiAl(){

        $json = file_get_contents("http://ipinfo.io/");
        $detaylar = json_decode($json);
        return $detaylar;
}

Metodun çalışması sonunda aşağıdaki gibi bir sonuc dönüyor bize. Metodumuza ip adresi olarak 8.8.8.8 gönderdim.

"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3860,-122.0838",
"org": "AS15169 Google Inc.",
"postal": "94040"

Eğer hangi sonucun döndüğünü görmek isterseniz Php ile aşağıdaki şekilde görebilirsiniz.

<?php

function ipAdresiAl($ip = null){

    if($ip == null){
        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");
        }
    }

    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $detaylar = json_decode($json);
    return $detaylar;
}

$ip = ipAdresiAl('8.8.8.8');

print_r($ip);

?>

Örnek uygulamamıza geçelim.

<?php

function ipAdresiAl($ip = null){

    if($ip == null){
        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");
        }
    }

    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $detaylar = json_decode($json);
    return $detaylar;
}

$ip = ipAdresiAl('8.8.8.8');

echo '
    <strong>Ip Adresi :</strong> '. $ip->ip . '<br/>
    <strong>Hostname :</strong> '. $ip->hostname . '<br/>
    <strong>City :</strong> '. $ip->city . '<br/>
    <strong>Region :</strong> '. $ip->region . '<br/>
    <strong>Country :</strong> '. $ip->country . '<br/>
    <strong>Location :</strong> '. $ip->loc . '<br/>
    <strong>Organization :</strong> '. $ip->org . '<br/>
    <strong>Postal :</strong> '. $ip->postal . '<br/>
';


?>

Yukarıdaki metod ve uygulama dosyalarına burdan Github hesabımdan ulaşabilirsiniz.

Yazar Hakkında

Burak Demir

Süleyman Demirel Üniversitesi Bilgisayar Mühendisliği öğrencisiyim. Yazılım, bilgi güvenliği, adli bilişim ve bir çok konuda meraklı !asosyal bir yazılımcı.