2006-08-02 10:07:34 +00:00

153 lines
4.7 KiB
PHP

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
// +----------------------------------------------------------------------+
// | PEAR::Net_DNSBL |
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 Sebastian Nohn <sebastian@nohn.net> |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Sebastian Nohn <sebastian@nohn.net> |
// +----------------------------------------------------------------------+
//
// $Id: DNSBL.php,v 1.4 2004/12/02 14:23:51 nohn Exp $
/**
* PEAR::Net_DNSBL
*
* This class acts as interface to generic Realtime Blocking Lists
* (RBL)
*
* Net_RBL looks up an supplied host if it's listed in 1-n supplied
* Blacklists
*
* @author Sebastian Nohn <sebastian@nohn.net>
* @package Net_DNSBL
* @license http://www.php.net/license/3_0.txt
* @version 0.5.3
*/
require_once dirname(__FILE__) . '/CheckIP.php';
class Net_DNSBL {
/**
* Array of blacklists.
*
* Must have one or more elements.
*
* @var array
* @access protected
*/
var $blacklists = array('sbl-xbl.spamhaus.net',
'bl.spamcop.net');
/**
* Set the blacklist to a desired blacklist.
*
* @param array Array of blacklists to use. May contain only one element.
* @access public
* @return bool true if the operation was successful
*/
function setBlacklists($blacklists)
{
if (is_array($blacklists)) {
$this->blacklists = $blacklists;
return true;
} else {
return false;
} // if
} // function
/**
* Get the blacklists.
*
* @access public
* @return array Currently set blacklists.
*/
function getBlacklists()
{
return $this->blacklists;
}
/**
* Checks if the supplied Host is listed in one or more of the
* RBLs.
*
* @param string Host to check for being listed.
* @access public
* @return boolean true if the checked host is listed in a blacklist.
*/
function isListed($host)
{
$isListed = false;
foreach ($this->blacklists as $blacklist) {
$result = gethostbyname($this->getHostForLookup($host, $blacklist));
if ($result != $this->getHostForLookup($host, $blacklist)) {
$isListed = true;
//if the Host was listed we don't need to check other RBLs,
break;
} // if
} // foreach
return $isListed;
} // function
/**
* Get host to lookup. Lookup a host if neccessary and get the
* complete FQDN to lookup.
*
* @param string Host OR IP to use for building the lookup.
* @param string Blacklist to use for building the lookup.
* @access protected
* @return string Ready to use host to lookup
*/
function getHostForLookup($host, $blacklist)
{
// Currently only works for v4 addresses.
if (!Net_CheckIP::check_ip($host)) {
$ip = gethostbyname($host);
} else {
$ip = $host;
}
return $this->buildLookUpHost($ip, $blacklist);
} // function
/**
* Build the host to lookup from an IP.
*
* @param string IP to use for building the lookup.
* @param string Blacklist to use for building the lookup.
* @access protected
* @return string Ready to use host to lookup
*/
function buildLookUpHost($ip, $blacklist)
{
return $this->reverseIp($ip).'.'.$blacklist;
} // function
/**
* Reverse the order of an IP. 127.0.0.1 -> 1.0.0.127. Currently
* only works for v4-adresses
*
* @param string IP to reverse.
* @access protected
* @return string Reversed IP
*/
function reverseIp($ip)
{
return implode('.', array_reverse(explode('.', $ip)));
} // function
} // class
?>