PHP ile IP adresleri tüm bir dizi / blok yönlendirmek için?

8 Cevap php

Ben IP adresleri bir dizi yönlendirmek için aşağıdaki parçacığını kullanıyorum. Benim dissallowed dizi IP adresleri tüm bir dizi / blok ekleme hakkında gitmek nasıl merak ediyorum ...

<?php // Let's redirect certain IP addresses to a "Page Not Found"
$disallowed = array("76.105.99.106");
$ip = $_SERVER['REMOTE_ADDR']; 

if(in_array($ip, $disallowed)) {
 header("Location: http://google.com");
 exit;
}
?>

Ben kullanarak çalıştı "76.105.99. *", "76.105.99", "76.105.99.0-76.105.99.255" olmadan herhangi bir şans.

Ben başka nedenlerden dolayı PHP ziyade mod_rewrite ve. Htaccess kullanmak gerekir.

8 Cevap

substr fonksiyonu deneyin:

$ip = '76.105.99.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip)) === $ip) {
    // deny access
}

Burada belirli bir ağ / maskesi kombinasyonu kontrol nasıl bir örnek:

$network=ip2long("76.105.99.0");
$mask=ip2long("255.255.255.0");
$remote=ip2long($_SERVER['REMOTE_ADDR']);

if (($remote & $mask)==$network)
{
    header("Location: http://example.com");
    exit;
}

Bu, bir sekizli içinde hizaya diğer maskeleri, örneğin test edebilirsiniz gibi bir string tabanlı eşleşme kullanarak daha iyidir IP'lerin bir / 20 blok

Farklı bir şekilde sorunu yaklaşım olabilir.

. Eğer 76.105.99 yasaklamak istiyorsanız * Yapabileceğin:

if (strpos($_SERVER['REMOTE_ADDR'], "76.105.99.")!==FALSE)
{
    header ('Location: http://google.com');
}

Yapmanız gereken CIDR tarafından tanımlanan belirli bir adresi belirli bir adres aralığı içinde yaşar olmadığını görmek için bir test olmasıdır

Yani örneğin, söylemek gerekiyor

192.168.1.5 ise

içeride

192.168.1.0/24

Bu işlev CIDR işi yapmak için bazı temel araçlar var varsayarak, yazmak kolaydır.

Assuming you are on a 32bit system, this class http://snipplr.com/view/15557/cidr-class-for-ipv4/ Pay attention to the IPisWithinCIDR function

Bu apache (veya başka bir sunucuda) bunu daha iyi olurdu

Tam olarak engelleme ilgilenen kim? Belirli IP adresleri bir demet engellemek (veya izin) için PHP veya apache kullanabilirsiniz.

Örneğin bir bütün ülkenin insanları engelleme istiyorsanız, o zaman size engellemek için gereken IP adreslerini vermek araçları vardır. Ne yazık ki, bu sadece bir dizi belirterek kadar basit değil.

Eğer bütün ülkeleri engellemek için. Htaccess sopa olabilir ip adreslerini bir grup oluşturur http://www.blockacountry.com/ hangi edin.

Ben sizin dizi için her IP adresi (aralığında) eklemek için bir for döngüsü oluşturmanız gerekir inanıyorum.

sahte kod

for i = 0 to 255
    disallowed[i] = "76.105.99." + i
next

Below is a URL showing something rather similar to what Mr. Dixon and Ameer are discussing: http://www.blackdog.ie/blog/blocking-ip-ranges-with-php/

Umarım bu yardımcı olur.

Respectfully, Wil