Попытка запроса spamhaus.org
для занесенного в черный список ip. Примером является 69.35.160.59
Если я пойду к https://www.spamhaus.org/lookup/
и введите его, он показывает в черный список с 112.198.83.17
, однако следующий код возвращает пустой массив.
Я печатаю URL, и он выглядит правильно отформатирован в обратном IP
17.83.198.112.zen.spamhaus.org
,
Есть идеи?
<?php
$ip = "112.198.83.17";
$blacklist = "zen.spamhaus.org";
$url = implode(".", array_reverse(explode(".", $ip))) . ".". $blacklist;
echo "$url<br>";
$record = dns_get_record($url);
print_r ($record);
?>
Вы делаете правильно. Смотрите здесь коды результатов http://www.spamhaus.org/faq/section/DNSBL%20Usage#366
Вот мой вывод для ip 69.35.160.59
Array (
[0] => Array
(
[host] => 59.160.35.69.zen.spamhaus.org
[type] => A
[ip] => 127.0.0.4
[class] => IN
[ttl] => 900
)
[1] => Array
(
[host] => 59.160.35.69.zen.spamhaus.org
[type] => TXT
[txt] => http://www.spamhaus.org/query/bl?ip=69.35.160.59
[entries] => Array
(
[0] => http://www.spamhaus.org/query/bl?ip=69.35.160.59
)
[class] => IN
[ttl] => 900
)
Ваш код правильный. Просто убедитесь, что вы не используете общедоступные преобразователи DNS, такие как 8.8.8.8 и 8.8.4.4, потому что код не будет работать, если вы это сделаете.
Вы можете проверить, какие преобразователи вы используете, просмотрев файл /etc/resolv.conf
Я создал простую функцию, которая возвращает true, если указан в SpamHaus. Любые входящие IP-адреса проверяются и либо разрешены, либо заблокированы:
function callSpamhaus($UserIP) {
// NON-INFECTED IP FOR TESTING
// 192.99.150.120
// INFECTED IP FOR TESTING
// 216.145.14.142
$blacklist = "zen.spamhaus.org";
$url = implode(".", array_reverse(explode(".", $UserIP))) . ".". $blacklist;
$record = dns_get_record($url);
if (is_array($record) && !empty($record)) :
return TRUE;
endif;
}
Условие запускается при каждом доступе к сайту, на котором выполняется функция, используя любой метод, выбранный вами для получения IP-адреса и создания для него переменной:
$SpamHaus = callSpamhaus($IPAddress);
if ($SpamHaus === TRUE) :
Redirect("/administration/accessblocked.php");
endif;