. // // Alexey A.Znayev, znaeff@mail.ru, http://xbsoft.org, http://xbsoft.ru // /////////////////////////////////////////////////////////////////////////// // This file contains public class DNSBL // This class performs IP address check in spam blocking lists as described // on http://ru.wikipedia.org/wiki/RBL class DNSBL { private $_aCheckers = array( 'spamhaus' => '.zen.spamhaus.org', 'spamcop' => '.bl.spamcop.net', 'dsbl' => '.list.dsbl.org', 'ordb' => '.relays.ordb.org', 'sorbs' => '.dnsbl.sorbs.net', 'njabl' => '.dnsbl.njabl.org' ); // AZ - key 'all' is illegal private $_sDefaultChecker = 'spamhaus'; /////////////////////////////////////////////////////////////////////////// // CheckSpamIP - check IP for spam in checkers : given, default or all available (may be slow) // parameters: // string $ip - ip address // string $checker - checker name or 'all' or nothing // returns: // true when IP exitsts in spam-lists of $checker or at least one of all checkers // false when not or when ip address is local or not correct // NOTE: method uses checkdnsrr(), this function is not available on Windows platforms in PHP < 5.3.0 public function CheckSpamIP($ip, $checker = ''){ if(empty($ip)) return false; if(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip) != 1) return false; $octets = explode('.', $ip); if($octets[0] == '127') return false; if($octets[0] == '10') return false; if($octets[0] == '192' && $octets[0] == '168') return false; if($octets[0] == '169' && $octets[0] == '254') return false; // ms windows if((int)$octets[0] > 255 || (int)$octets[1] > 255 || (int)$octets[2] > 255 || (int)$octets[3] > 255 ) return false; $ret_val = false; $res_dns = array(); $PTR = implode(array_reverse($octets), '.'); //$type = 'A'; if($checker === 'all'){ foreach(array_values($this->_aCheckers) as $c){ //$ret_val = $ret_val || checkdnsrr($PTR . $c, $type); $ret_val = $ret_val || $this->_CheckDNSAnswer(dns_get_record($PTR . $c, DNS_A)); if($ret_val) break; } }else if(array_key_exists($checker, $this->_aCheckers)){ //$ret_val = checkdnsrr($PTR . $this->_aCheckers[$checker], $type); $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$checker], DNS_A)); }else{ //$ret_val = checkdnsrr($PTR . $this->_aCheckers[$this->_sDefaultChecker], $type); $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$this->_sDefaultChecker], DNS_A)); } return $ret_val; } /////////////////////////////////////////////////////////////////////////// // GetCheckers - gets list of available checker names // returns: // array of strings public function GetCheckers(){ return array_keys($this->_aCheckers); } /////////////////////////////////////////////////////////////////////////// // GetDefaultChecker - gets default checker name // returns: // string public function GetDefaultChecker(){ return $this->_sDefaultChecker; } /////////////////////////////////////////////////////////////////////////// // SetDefaultChecker - sets default checker name // parameters: // string $new_checker - new default checker name // returns: // true when success // false when failed ($new_checker is not in the list of available checker names) public function SetDefaultChecker($new_checker){ if(array_key_exists($new_checker, $this->_aCheckers)){ $this->_sDefaultChecker = $new_checker; return true; }else{ return false; } } // private methods /////////////////////////////////////////////////////////////////////////// // _CheckDNSAnswer - checks DNS-server answer for 127.0.0.* values // returns: // true when success // false when failed private function _CheckDNSAnswer($dns_answer){ if(!is_array($dns_answer)) return false; $len = count($dns_answer); if($len <= 0) return false; for($i=0; $i<$len; $i++){ $obj = $dns_answer[$i]; if(!(is_object($obj) || is_array($obj))) return false; $ip_str = $obj['ip']; if(!is_string($ip_str)) return false; $pos = strpos($ip_str, '127.0.0.'); if($pos !== false) return true; } return false; } } // end of class DNSBL ?> Anmelden ‹ blitsblog — WordPress

Powered by WordPress

Fehler: Cookies sind wegen einer unerwarteten Ausgabe gesperrt. Hilfe findest du in dieser Dokumentation oder wende dich an die Support-Foren.

← Zurück zu blitsblog