8 define(
'CH_WSB_DNSBL_NEGATIVE', 0);
9 define(
'CH_WSB_DNSBL_POSITIVE', 1);
10 define(
'CH_WSB_DNSBL_FAILURE', 2);
13 define(
'CH_WSB_DNSBL_ANYPOSTV_RETFIRST', 0);
14 define(
'CH_WSB_DNSBL_ANYPOSTV_RETEVERY', 1);
15 define(
'CH_WSB_DNSBL_ALLPOSTV_RETEVERY', 2);
17 define(
'CH_WSB_DNSBL_MATCH_ANY',
"any");
19 define(
'CH_WSB_DNSBL_CHAIN_SPAMMERS',
"spammers");
20 define(
'CH_WSB_DNSBL_CHAIN_WHITELIST',
"whitelist");
21 define(
'CH_WSB_DNSBL_CHAIN_URIDNS',
"uridns");
41 private $aChains = array ();
53 $lookupkey = $this->ipreverse($sIp);
54 if (
false === $lookupkey)
57 if (is_array($mixedChain))
58 $aChain = $mixedChain;
60 $aChain = &$this->aChains[$mixedChain];
61 return $this->dnsbl_lookup($aChain, $lookupkey, $querymode);
69 if (is_array($mixedChain))
70 $aChain = $mixedChain;
72 $aChain = &$this->aChains[$mixedChain];
73 return $this->dnsbl_lookup($aChain, $sUri, $querymode);
78 $iIP = sprintf(
"%u", ip2long($sIP));
81 return $GLOBALS[
'MySQL']->query(
"INSERT INTO `sys_antispam_block_log` SET `ip` = '$iIP', `member_id` = '$iMemberId', `type` = '$sType', `extra` = '$sExtraData', `added` = " .
time());
92 private function dnsbl_lookup(&$zones, $key, $querymode)
95 $numservers = count ($zones);
105 foreach ($servers
as $r) {
106 $resultaddr = gethostbyname ($key .
"." . $r[
'zonedomain']);
108 if ($resultaddr && $resultaddr != $key .
"." . $r[
'zonedomain']) {
110 $postvresp = $r[
'postvresp'];
113 (preg_match(
"/^\d+\.\d+\.\d+\.\d+$/", $postvresp) && $resultaddr == $postvresp) ||
114 (is_numeric($postvresp) && (ip2long($resultaddr) & $postvresp))
123 if ($numpositive == $numservers)
131 private function ipreverse ($sIp)
133 if (!preg_match (
'/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/', $sIp, $m))
136 return "{$m[4]}.{$m[3]}.{$m[2]}.{$m[1]}";
139 private function initChains()