我如何通过php spamhaus ip blacklist查询

时间:2015-05-31 18:43:54

标签: php spam

尝试查询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);

?>

3 个答案:

答案 0 :(得分:2)

你做得对。请参阅此处查看结果代码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
    )

答案 1 :(得分:2)

您的代码是正确的。只要确保你没有使用像8.8.8.8和8.8.4.4这样的公共DNS解析器,因为如果这样做,代码将无效。 您可以通过查看文件/etc/resolv.conf

来查看您正在使用的解析器

答案 2 :(得分:1)

我创建了一个简单的函数,如果与SpamHaus一起列出,则返回true。检查任何传入的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;