• 11-11-2023, 00:19:49
    #1
    iptal, teşekkürler
  • Kabul Edilen Cevap
    • 0 Beğeni
      geoplugin.net kapalı, kodlarla uğraşmak yerine Cloudflare üzerinden Firewall Rule ekleyip ülke bazlı engelleme yapabilirsiniz.
  • 11-11-2023, 00:24:00
    #2
    İlk olarak, kullanıcıların IP adresi ve yasaklı ülkelerin bilgilerini içeren bir tablo oluşturmanız gerekecek. Aşağıda bir örnek şema ve MariaDB (MySQL) sorguları bulunmaktadır:
    CREATE TABLE banned_countries (
        id INT PRIMARY KEY AUTO_INCREMENT,
        country_code CHAR(2) NOT NULL
    );
    
    INSERT INTO banned_countries (country_code) VALUES
        ('RU'),
        ('FR'),
        ('CN'),
        ('CO');
    Bu tablo, yasaklı ülkelerin ISO ülke kodlarını içerir. Şimdi, bu tabloyu kullanarak PHP kodunu MariaDB ile uyumlu hale getirelim:

    <?php
    
    function isCountryBanned($countryCode)
    {
        $db_host = 'your_database_host';
        $db_user = 'your_database_user';
        $db_pass = 'your_database_password';
        $db_name = 'your_database_name';
    
        $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
    
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
    
        $countryCode = $conn->real_escape_string($countryCode);
    
        $query = "SELECT COUNT(*) as count FROM banned_countries WHERE country_code = '$countryCode'";
        $result = $conn->query($query);
    
        if ($result && $result->num_rows > 0) {
            $row = $result->fetch_assoc();
            $count = $row['count'];
    
            return $count > 0;
        }
    
        return false;
    }
    
    $ziyaretci_ulke_kodu = ip_info("Visitor", "Countrycode");
    
    if (isCountryBanned($ziyaretci_ulke_kodu)) {
        header('HTTP/1.1 403 Forbidden');
        echo "Forbidden Country IP! / Yasaklı Ülke IP'si";
        die();
    }
    
    ?>
    Bu örnekte, banned_countries tablosundan yasaklı ülkeleri kontrol etmek için isCountryBanned adlı bir fonksiyon ekledik. Bu fonksiyon, veritabanına bağlanır ve belirli bir ülkenin yasaklı olup olmadığını kontrol eder.
    Lütfen veritabanı bağlantı bilgilerinizi, tablo adlarını ve diğer ayrıntıları gerçek değerlerle değiştirdiğinizden emin olun.

    Ya da cloudflare ile ülkeleri doğrudan yasaklayabilirsiniz hocam
  • 11-11-2023, 00:24:56
    #3
    Üyeliği durduruldu
    db alakakası yok bu kodun
  • 11-11-2023, 00:26:57
    #4
    Bu cevap, konu sahibi tarafından kabul edilebilir bir cevap olarak işaretlendi.
    geoplugin.net kapalı, kodlarla uğraşmak yerine Cloudflare üzerinden Firewall Rule ekleyip ülke bazlı engelleme yapabilirsiniz.
  • 11-11-2023, 00:32:16
    #5
    ok35 adlı üyeden alıntı: mesajı görüntüle
    Evet, siz söyleyince dikkatimi çekti hocam teşekkürler. Ancak henüz 6 saat önceye kadar çalışıyordu bu kod o siteden data çekemediği için mi pasif oldu diyorsunuz? Peki bu siteye alternatif bir site var mı koda ekleyebileceğim? Bir de mecburen kod ile yapmam lazım çünkü o ülkelerden giren kullanıcıları bir mesaj ve url ile başka bir yere yönlendirmem gerekiyor.
    Geçmişte bende buna benzer bir yöntem kullanıyordum, data çektiğim site ratelimit uygulayınca anladım ki dışarıdan çekmektense kütüphane kullanmak daha iyi. geoip2'i composer ile kullanabilirsiniz. ChatGPT yardımcı olacaktır, basit bir işlem.
  • 11-11-2023, 07:28:06
    #6
    Selam hocam, aşağıdaki projemde kullandığım curl işine yarayacaktır.


    <?php
    $ip = htmlspecialchars($_GET['ip']);

    $url = "https://ipapi.co/$ip/json/";

    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $headers = array("X-Custom-Header: value","Content-Type: application/json","User-Agent: Mozilla/5.0 (Linux; Android 11; SM-M307FN Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.87 Mobile Safari/537.36 Instagram 218.0.0.19.108 Android (30/11; 420dpi; 1080x2218; samsung; SM-M307FN; m30s; exynos9611; tr_TR; 345526713)",);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    $resp = curl_exec($curl);
    curl_close($curl);
    $sonuc = json_decode($resp);

    $region = $sonuc->region;
    $country_name = $sonuc->country_name;
    $postal = $sonuc->postal;
    $country_calling_code = $sonuc->country_calling_code;
    $currency = $sonuc->currency;
    $asn = $sonuc->asn;
    $org = $sonuc->org;

    ?>
    https://github.com/ozgurege0/iptoinfo
    Bir sorun varsa bana buradan yada profilimdeki whatsapp'tan ulaşabilirsin.
  • 11-11-2023, 22:25:15
    #7
    ok35 adlı üyeden alıntı: mesajı görüntüle
    Hocam teşekkür ederim ama hiç anlamadım 😄
    Anladığım kadarıyla ilk başta ziyaretçi ip'sini alıyorsun, ve bir api yardımıyla bu api'ye ziyaretçi ip'sini göndererek kullanıcı hakkında ilgili bilgilere ulaşıyor ve bu bilgilerle bir yönlendirme yapıyorsun. Verdiğim kod tam olarak aradaki bu api'yi sağlıyor. Whatsapp'tan ulaşıp detay verirsen komple kodu yazabilirim.