• 06-01-2013, 21:58:14
    #1
    İnternette Php ile ilgili bir araştırma yaparken bir fonksiyon dikkatimi çekti. Söz konusu fonksiyonu kullanarak kullanıcının gerçek ip adresini alabiliyorsunuz. Php’de kullanıcının ip adresini almak için birkaç yöntem bulunmaktadır. Fakat bu yöntemler bazen yetersiz gelmektedir. Bazı şirketler ya da kullanıcılar ip adreslerini maskeleyerek bizden gerçek ip adreslerini gizlerler. Bu gibi durumlarda biz sadece 192.168.xxx.xxx gibi işimize yaramayacak ip adreslerini görebiliriz.

    Standart php ip bulma yöntemleriyle bunu engelleyemezsiniz. Fakat aşağıdaki fonksiyon aracılığıyla kullanıcının gerçek ip adresini elde edebilirsiniz. (Not: Bu fonksiyon ip adresinin %100 gerçekliğini garanti etmez, sadece standart yöntemlere göre daha güvenilirdir.)

    Php Standart Ip Adresi Alma Kodu:

    <?php
    echo $_SERVER['REMOTE_ADDR'];
    ?>
    Php Gerçek Ip Adresi Alma Fonksiyonu:

    Fonksiyon Kodları:

    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;
    }
    Kullanımı:

    $ip_adresi = GetIP();
    // "echo GetIP();" diyerek ekrana da yazdırabilirsiniz.
    Test Etmek İçin Tıklayınız

    Kaynak: Php ile Kullanıcının Gerçek IP Adresini Alma
  • 06-01-2013, 22:22:33
    #2
    dedigin gibi %100 değiil

  • 22-10-2017, 20:09:02
    #3
    gerçek ip alamazsın ki en basitinden gizli bir input açmış olsan value değerine otomatik olarak ip adresini versen kullanıcı gelse (chrome için bahsediyorum) öğeyi denetle deyip orada ip adresini değiştirse her halükarda ip adresini değişmiş olamaz mı?
    NOT: Konuyu hortlatmış olabilirim ama google de yeni arama yapıp denk gelebilenler için yazdım. En azından farklı önlemler alınması için
  • 22-10-2017, 20:17:07
    #4
    ZamanliWeb adlı üyeden alıntı: mesajı görüntüle
    gerçek ip alamazsın ki en basitinden gizli bir input açmış olsan value değerine otomatik olarak ip adresini versen kullanıcı gelse (chrome için bahsediyorum) öğeyi denetle deyip orada ip adresini değiştirse her halükarda ip adresini değişmiş olamaz mı?
    NOT: Konuyu hortlatmış olabilirim ama google de yeni arama yapıp denk gelebilenler için yazdım. En azından farklı önlemler alınması için
    ne inputu ne şeyi anlamadım ben ne dediğinizi. gerçek ip adresini zaten aldıysan niye inputa yazasın 1 değişkende tutar işlem yaparsın. ayrıca nasıl alınamaz gerçek ip adresi genel IPV4 to dns connection bu paket yollayanın ip adresi çok rahat yakanır. sanırım biraz yenisizniz yazlım yada web app konusunda
  • 23-10-2017, 19:12:09
    #5
    mahirtaha adlı üyeden alıntı: mesajı görüntüle
    ne inputu ne şeyi anlamadım ben ne dediğinizi. gerçek ip adresini zaten aldıysan niye inputa yazasın 1 değişkende tutar işlem yaparsın. ayrıca nasıl alınamaz gerçek ip adresi genel IPV4 to dns connection bu paket yollayanın ip adresi çok rahat yakanır. sanırım biraz yenisizniz yazlım yada web app konusunda
    Konuda verilen fonksiyon için yazdım. Gerçek ip almanın imkansız olduğunu yazmadım.
  • 23-10-2017, 22:27:08
    #6
    ZamanliWeb adlı üyeden alıntı: mesajı görüntüle
    Konuda verilen fonksiyon için yazdım. Gerçek ip almanın imkansız olduğunu yazmadım.
    bende gerçek ip almak imkansız diyorsun demedim hocam input form ne alaka dedim ben bişey demiyorum devam edin siz
  • 05-02-2025, 14:01:33
    #7
    Yıllar sonra konuyu tekrar uyandırmış olacağım. Paylaştığınız kod işime yaramışken güncel php sürümüne göre dahada iyi hale getireyim dedim.
    Artıları:
    Özel ve rezervli IP filtreleri kullanıldı. (FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE).
    $_SERVER değişkeni şuanda, getenv() yerine daha güvenlidir.

    Dikkat: Eğer Cloudflare kullanıyorsanız HTTP_CF_CONNECTING_IP kullanmanız gerekiyor.

    function GetSecureIP() {
        if (!empty($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach ($ips as $ip) {
                $ip = trim($ip);
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : 'UNKNOWN';
    }
  • 05-02-2025, 20:11:43
    #8
    function getClientIP() {
        $ip = 'UNKNOWN';
        $ipSources = [
            // Cloudflare
            'HTTP_CF_CONNECTING_IP',
            
            // CDN ve Proxy Servisleri
            'HTTP_TRUE_CLIENT_IP', // Akamai ve bazı CDN'ler
            'HTTP_X_REAL_IP',      // Nginx proxy
            'HTTP_X_FORWARDED_FOR',
            'HTTP_X_FORWARDED',
            'HTTP_FORWARDED_FOR',
            'HTTP_FORWARDED',
            
            // Load Balancer ve Proxy Sunucular
            'HTTP_X_CLUSTER_CLIENT_IP',
            'HTTP_CLIENT_IP',
            
            // AWS, Google Cloud ve Azure
            'HTTP_X_AWS_FORWARDED_FOR',
            'HTTP_X_GOOGLE_REAL_IP',
            'HTTP_X_AZURE_CLIENTIP',
            
            // VPN ve Proxy Kontrolleri
            'HTTP_VIA',
            'HTTP_X_COMING_FROM',
            'HTTP_COMING_FROM',
            
            // Son çare olarak doğrudan IP
            'REMOTE_ADDR'
        ];
        // Önce bilinen CDN ve proxy servislerini kontrol et
        foreach ($ipSources as $source) {
            if (!empty($_SERVER[$source])) {
                if ($source === 'HTTP_X_FORWARDED_FOR') {
                    // X-Forwarded-For başlığında birden fazla IP olabilir
                    $ips = explode(',', $_SERVER[$source]);
                    // İlk geçerli IP'yi bul
                    foreach ($ips as $possibleIP) {
                        $possibleIP = trim($possibleIP);
                        if (isValidPublicIP($possibleIP)) {
                            return $possibleIP;
                        }
                    }
                } else {
                    $possibleIP = trim($_SERVER[$source]);
                    if (isValidPublicIP($possibleIP)) {
                        return $possibleIP;
                    }
                }
            }
        }
        return $ip;
    }
    // IP adresinin geçerli bir public IP olup olmadığını kontrol eden fonksiyon
    function isValidPublicIP($ip) {
        // Boş değer kontrolü
        if (empty($ip)) {
            return false;
        }
        // IP formatı kontrolü
        if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6)) {
            return false;
        }
        // Özel IP aralıklarını kontrol et
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
            // IP adresinin bazı özel durumlarını kontrol et
            $invalidIPs = [
                '0.0.0.0',
                '::1',
                'localhost',
                '127.0.0.1'
            ];
            if (!in_array($ip, $invalidIPs)) {
                return true;
            }
        }
        return false;
    }
    // IP adresinin coğrafi konumunu almak için yardımcı fonksiyon
    function getIPGeolocation($ip) {
        try {
            $url = "http://ip-api.com/json/" . $ip;
            $response = @file_get_contents($url);
            
            if ($response !== false) {
                return json_decode($response, true);
            }
        } catch (Exception $e) {
            error_log("IP Geolocation Error: " . $e->getMessage());
        }
        
        return null;
    }
    // IP adresinin proxy/VPN kullanıp kullanmadığını kontrol eden fonksiyon
    function isProxyIP($ip) {
        $proxyHeaders = [
            'HTTP_VIA',
            'HTTP_X_FORWARDED_FOR',
            'HTTP_FORWARDED_FOR',
            'HTTP_X_FORWARDED',
            'HTTP_FORWARDED',
            'HTTP_CLIENT_IP',
            'HTTP_FORWARDED_FOR_IP',
            'VIA',
            'X_FORWARDED_FOR',
            'FORWARDED_FOR',
            'X_FORWARDED',
            'FORWARDED',
            'CLIENT_IP',
            'FORWARDED_FOR_IP',
            'HTTP_PROXY_CONNECTION'
        ];
        foreach ($proxyHeaders as $header) {
            if (isset($_SERVER[$header])) {
                return true;
            }
        }
        return false;
    }
    // IP adresinin güvenilirliğini kontrol eden fonksiyon
    function checkIPTrustLevel($ip) {
        $trustLevel = [
            'score' => 0,
            'reasons' => []
        ];
        // Geçerli public IP kontrolü
        if (!isValidPublicIP($ip)) {
            $trustLevel['reasons'][] = 'Invalid or private IP address';
            return $trustLevel;
        }
        // Proxy/VPN kontrolü
        if (isProxyIP($ip)) {
            $trustLevel['reasons'][] = 'Proxy/VPN detected';
            $trustLevel['score'] -= 2;
        }
        // Coğrafi konum kontrolü
        $geoData = getIPGeolocation($ip);
        if ($geoData && isset($geoData['status']) && $geoData['status'] === 'success') {
            $trustLevel['score'] += 1;
            $trustLevel['reasons'][] = 'Valid geolocation data';
        }
        // Cloudflare güvenlik kontrolü
        if (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && $_SERVER['HTTP_CF_CONNECTING_IP'] === $ip) {
            $trustLevel['score'] += 2;
            $trustLevel['reasons'][] = 'Verified by Cloudflare';
        }
        return $trustLevel;
    }
    // Kullanım örneği
    function getIPInfo() {
        $ip = getClientIP();
        return [
            'ip' => $ip,
            'isValid' => isValidPublicIP($ip),
            'isProxy' => isProxyIP($ip),
            'geolocation' => getIPGeolocation($ip),
            'trustLevel' => checkIPTrustLevel($ip)
        ];
    }
    // IP adresinin geçerli olup olmadığını kontrol eden yardımcı fonksiyon
    function isValidIP($ip) {
        return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
    }
    [*]IP Tespiti ve Doğrulama
    • Çoklu kaynaklardan IP adresi tespiti (Cloudflare, CDN'ler, Proxy'ler)
    • IPv4 ve IPv6 desteği
    • Özel ve rezerve IP aralıklarının kontrolü
    • IP formatı doğrulama
    [*]CDN ve Proxy Desteği
    • Cloudflare entegrasyonu
    • Akamai ve diğer CDN'lerin desteklenmesi
    • Load balancer IP tespiti
    • Çoklu proxy header desteği
    [*]Cloud Servis Desteği
    • AWS header desteği
    • Google Cloud IP tespiti
    • Azure client IP desteği
    [*]Güvenlik Kontrolleri
    • VPN kullanım tespiti
    • Proxy kontrolü
    • IP güvenilirlik skoru hesaplama
    • IP adresinin coğrafi doğrulaması
    [*]Coğrafi Konum Özellikleri
    • IP-API.com entegrasyonu
    • Coğrafi konum verisi çekme
    • Hata yönetimi ve loglama
    • JSON formatında konum bilgisi
    [*]Güvenilirlik Değerlendirmesi
    • IP güvenilirlik skoru hesaplama
    • Proxy/VPN kullanım tespiti
    • Cloudflare doğrulama kontrolü
    • Çoklu faktörlü güvenilirlik analizi
    [*]Hata Yönetimi
    • Try-catch ile hata yakalama
    • Hata loglama sistemi
    • Boş değer kontrolleri
    • Geçersiz IP kontrolü
    [*]Yardımcı Fonksiyonlar
    • IP validasyon fonksiyonları
    • Proxy header kontrolleri
    • IP bilgi toplama
    • Detaylı IP analizi
    Örnek ücretsiz api uygulamam: https://hucrem.com/app/ip/