2017-08-25 169 views
0

我想編寫一個PHP函數,它會接收用戶的IP地址,根據已知的黑名單檢查並將用戶從黑名單的IP地址重定向到默認的「Access Forbidden」頁面。我只想允許從未列入黑名單的IP地址訪問我的主頁。誰能幫忙?這是迄今爲止我所擁有的。php檢查用戶的IP地址是否被列入黑名單並將其從我的應用程序中阻止

<?php 

$ip=$_SERVER["REMOTE_ADDR"]; 

function flush_buffers() 
{ 
    ini_set('output_buffering','on'); 
    ini_set('zlib.output_compression', 0); 
    ini_set('implicit_flush',1); 
    ob_implicit_flush(); 

    echo ("<html><head><head><body>"); 
    for($i=0;$i<20;$i++) { 
     echo $i; 
     echo str_repeat(" ", 500); 
     ob_flush(); 
     flush(); 
     sleep(1); 
    } 
} 

function dnsbllookup($ip) 
{ 
    $dnsbl_lookup=array(
    "access.redhawk.org", 
    "b.barracudacentral.org", 
    "bl.csma.biz", 
    "bl.emailbasura.org", 
    "bl.spamcannibal.org", 
    "bl.spamcop.net", 
    "bl.technovision.dk", 
    "blackholes.five-ten-sg.com", 
    "blackholes.wirehub.net", 
    "blacklist.sci.kun.nl", 
    "block.dnsbl.sorbs.net", 
    "blocked.hilli.dk", 
    "bogons.cymru.com", 
    "cart00ney.surriel.com", 
    "cbl.abuseat.org", 
    "dev.null.dk", 
    "dialup.blacklist.jippg.org", 
    "dialups.mail-abuse.org", 
    "dialups.visi.com", 
    "dnsbl.ahbl.org", 
    "dnsbl.antispam.or.id", 
    "dnsbl.cyberlogic.net", 
    "dnsbl.kempt.net", 
    "dnsbl.njabl.org", 
    "dnsbl.sorbs.net", 
    "dnsbl-1.uceprotect.net", 
    "dnsbl-2.uceprotect.net", 
    "dnsbl-3.uceprotect.net", 
    "duinv.aupads.org", 
    "dul.dnsbl.sorbs.net", 
    "dul.ru", 
    "escalations.dnsbl.sorbs.net", 
    "hil.habeas.com", 
    "http.dnsbl.sorbs.net", 
    "intruders.docs.uu.se", 
    "ips.backscatterer.org", 
    "korea.services.net", 
    "mail-abuse.blacklist.jippg.org", 
    "misc.dnsbl.sorbs.net", 
    "msgid.bl.gweep.ca", 
    "new.dnsbl.sorbs.net", 
    "no-more-funn.moensted.dk", 
    "old.dnsbl.sorbs.net", 
    "pbl.spamhaus.org", 
    "proxy.bl.gweep.ca", 
    "psbl.surriel.com", 
    "pss.spambusters.org.ar", 
    "rbl.schulte.org", 
    "rbl.snark.net", 
    "recent.dnsbl.sorbs.net", 
    "relays.bl.gweep.ca", 
    "relays.bl.kundenserver.de", 
    "relays.mail-abuse.org", 
    "relays.nether.net", 
    "rsbl.aupads.org", 
    "sbl.spamhaus.org", 
    "smtp.dnsbl.sorbs.net", 
    "socks.dnsbl.sorbs.net", 
    "spam.dnsbl.sorbs.net", 
    "spam.olsentech.net", 
    "spamguard.leadmon.net", 
    "spamsources.fabel.dk", 
    "tor.ahbl.org", 
    "web.dnsbl.sorbs.net", 
    "whois.rfc-ignorant.org", 
    "xbl.spamhaus.org", 
    "zen.spamhaus.org", 
    "zombie.dnsbl.sorbs.net", 
    "bl.tiopan.com", 
    "dnsbl.abuse.ch", 
    "tor.dnsbl.sectoor.de", 
    "ubl.unsubscore.com", 
    "cblless.anti-spam.org.cn", 
    "dnsbl.tornevall.org", 
    "dnsbl.anticaptcha.net", 
    "dnsbl.dronebl.org" 
    ); // Add your preferred list of DNSBL's 
    $AllCount = count($dnsbl_lookup); 
    $BadCount = 0; 
    if($ip) 
    { 
     $reverse_ip = implode(".", array_reverse(explode(".", $ip))); 
     foreach($dnsbl_lookup as $host) 
     { 
      if(checkdnsrr($reverse_ip.".".$host.".", "A")) 
      { 
//    echo "<span color='#339933'>Listed on ".$reverse_ip.'.'.$host."!</span><br/>"; 
       flush_buffers(); 
       $BadCount++; 
      } 
      else 
      { 
//    echo "Not listed on ".$reverse_ip.'.'.$host."!<br/>"; 
       flush_buffers(); 
      } 
     } 
    } 
    else 
    { 
//  echo "Empty ip!<br/>"; 
     flush_buffers(); 
    } 

// echo "This ip has ".$BadCount." bad listings of ".$AllCount."!<br/>"; 

    flush_buffers(); 

    if($BadCount==0) 
    { 
     include("index.php"); 
    } 
    else 
    { 
     include("default.htm"); 
    } 

} 

if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/",@$ip) == true) 
{ 
    dnsbllookup($ip); 
}?> 
+1

您有什麼問題? – Barmar

+1

@Barmar他在dnsbllookup函數中的問題。我前段時間使用了相同的功能,並且ANY IP被標記爲黑名單。所以沒有人會打開他的網站,因爲不列入黑名單。 – diavolic

+0

它看起來像'flush_buffers'創建無效的HTML。每當你打電話時,它都會發送''。但它永遠不會發送結束標籤。 – Barmar

回答

0

真正的問題是這需要多長時間。

做了一些改變,以顯示我的意思

平均時間爲60秒,這是一個很長一段時間來等待一個網站

<?php 

$ip=$_SERVER["REMOTE_ADDR"]; 
$tstart=time(); 
echo $ip."<BR>"; 

function flush_buffers() 
{ 
    ini_set('output_buffering','on'); 
    //ini_set('zlib.output_compression', 0); 
    ini_set('implicit_flush',1); 
    ob_implicit_flush(); 

    //echo ("<html><head><head><body>"); 
    for($i=0;$i<20;$i++) { 
     // echo $i; 
     echo str_repeat(" ", 500); 
     ob_flush(); 
     flush(); 
     // sleep(1); 
    } 
} 

function dnsbllookup($ip) 
{ 
    $dnsbl_lookup=array(
    "access.redhawk.org", 
    "b.barracudacentral.org", 
    "bl.csma.biz", 
    "bl.emailbasura.org", 
    "bl.spamcannibal.org", 
    "bl.spamcop.net", 
    "bl.technovision.dk", 
    "blackholes.five-ten-sg.com", 
    "blackholes.wirehub.net", 
    "blacklist.sci.kun.nl", 
    "block.dnsbl.sorbs.net", 
    "blocked.hilli.dk", 
    "bogons.cymru.com", 
    "cart00ney.surriel.com", 
    "cbl.abuseat.org", 
    "dev.null.dk", 
    "dialup.blacklist.jippg.org", 
    "dialups.mail-abuse.org", 
    "dialups.visi.com", 
    "dnsbl.ahbl.org", 
    "dnsbl.antispam.or.id", 
    "dnsbl.cyberlogic.net", 
    "dnsbl.kempt.net", 
    "dnsbl.njabl.org", 
    "dnsbl.sorbs.net", 
    "dnsbl-1.uceprotect.net", 
    "dnsbl-2.uceprotect.net", 
    "dnsbl-3.uceprotect.net", 
    "duinv.aupads.org", 
    "dul.dnsbl.sorbs.net", 
    "dul.ru", 
    "escalations.dnsbl.sorbs.net", 
    "hil.habeas.com", 
    "http.dnsbl.sorbs.net", 
    "intruders.docs.uu.se", 
    "ips.backscatterer.org", 
    "korea.services.net", 
    "mail-abuse.blacklist.jippg.org", 
    "misc.dnsbl.sorbs.net", 
    "msgid.bl.gweep.ca", 
    "new.dnsbl.sorbs.net", 
    "no-more-funn.moensted.dk", 
    "old.dnsbl.sorbs.net", 
    "pbl.spamhaus.org", 
"zen.spamhaus.org", 
    "proxy.bl.gweep.ca", 
    "psbl.surriel.com", 
    "pss.spambusters.org.ar", 
    "rbl.schulte.org", 
    "rbl.snark.net", 
    "recent.dnsbl.sorbs.net", 
    "relays.bl.gweep.ca", 
    "relays.bl.kundenserver.de", 
    "relays.mail-abuse.org", 
    "relays.nether.net", 
    "rsbl.aupads.org", 
    "sbl.spamhaus.org", 
    "smtp.dnsbl.sorbs.net", 
    "socks.dnsbl.sorbs.net", 
    "spam.dnsbl.sorbs.net", 
    "spam.olsentech.net", 
    "spamguard.leadmon.net", 
    "spamsources.fabel.dk", 
    "tor.ahbl.org", 
    "web.dnsbl.sorbs.net", 
    "whois.rfc-ignorant.org", 
    "xbl.spamhaus.org", 
    "zen.spamhaus.org", 
    "zombie.dnsbl.sorbs.net", 
    "bl.tiopan.com", 
    "dnsbl.abuse.ch", 
    "tor.dnsbl.sectoor.de", 
    "ubl.unsubscore.com", 
    "cblless.anti-spam.org.cn", 
    "dnsbl.tornevall.org", 
    "dnsbl.anticaptcha.net", 
    "dnsbl.dronebl.org" 
    ); // Add your preferred list of DNSBL's 
    $AllCount = count($dnsbl_lookup); 
    $BadCount = 0; 
    if($ip) 
    { 
     $reverse_ip = implode(".", array_reverse(explode(".", $ip))); 
     foreach($dnsbl_lookup as $host) 
     { 
      if(checkdnsrr($reverse_ip.".".$host.".", "A")) 
      { 
       echo "<span color='#339933'>Listed on ".$reverse_ip.'.'.$host."!</span><br/>"; 
       flush_buffers(); 
       $BadCount++; 
      } 
      else 
      { 
//    echo "Not listed on ".$reverse_ip.'.'.$host."!<br/>"; 
       flush_buffers(); 
      } 
     } 
    } 
    else 
    { 
//  echo "Empty ip!<br/>"; 
     flush_buffers(); 
    } 

    echo "This ip has ".$BadCount." bad listings of ".$AllCount."!<br/>"; 

    flush_buffers(); 

    if($BadCount==0) 
    { 
    //  include("index.php"); 
echo "Not blacklisted "; 
    } 
    else 
    { 
    // include("default.htm"); 
echo "Blacklisted"; 
    } 

} 

if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/",@$ip) == true) 
{ 
    dnsbllookup($ip); 
} 
$tend=time(); 

$tvar=$tend-$tstart; 
echo "<BR> took $tvar seconds <br>"; 
?> 
相關問題