首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dnsbl黑名单查询在Linux服务器上不起作用

dnsbl黑名单查询在Linux服务器上不起作用
EN

Stack Overflow用户
提问于 2013-11-15 22:39:49
回答 1查看 491关注 0票数 0

我有一个问题是,如果我在本地wampserver上运行我的这个脚本,那么它会显示正确的结果,如果它已经被列入黑名单,但如果我在我的服务器上运行,等等。/usr/bin/php path-to-phpscript.php则显示此ip被列入所有bls名称的黑名单,这是不正确的。

代码语言:javascript
复制
<?php

$bls = array("b.barracudacentral.org",
"bl.score.senderscore.com",
"pbl.spamhaus.org",
"sbl.spamhaus.org",
"xbl.spamhaus.org",
"zen.spamhaus.org",
"dbl.spamhaus.org",
"sbl-xbl.spamhaus.org",
);


$ip = '62.213.183.192';

if ( isset($ip)) {

if ( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) || false === filter_var($ip, FILTER_VALIDATE_URL)) {

    if (false === filter_var($ip, FILTER_VALIDATE_URL  )) { 
        $iptosplit = gethostbyname($ip);
    }
    else {
        $iptosplit = $ip;
    }
    $splitip = explode (".", $iptosplit);
    $iptolookup = "$splitip[3].$splitip[2].$splitip[1].$splitip[0]";
    $counter=1;
    $blList = array();
    foreach ( $bls as $rbl ) {
        //echo "<tr>";
        $rbllookup = $iptolookup.".".$rbl;
        $lookup = gethostbyname($rbllookup);

        if ( $lookup != $rbllookup || $lookup == $ip) {
            $qtxtresult = dns_get_record("$rbllookup", DNS_TXT);
            if ( ! isset($qtxtresult[0]['txt']) ) {
                $qtxtresult[0]['txt'] = "";
            }
            $blList[$counter]=$ip.' is listed in ('.$rbl.')';
            echo '...........Listed in -'.$rbl.'<br />';                
        }
        echo str_repeat(" ", 24), "\n";

        $counter++;
    }
}
}
?>
EN

回答 1

Stack Overflow用户

发布于 2014-10-26 19:48:56

此代码已包含在dnsbl.tornevall.org (可通过https://dnsbl.tornevall.org/download/下载)的源代码段中,如果该ip被列入黑名单,则会返回一个数组。它还支持ipv6。如果它被列入黑名单,则$result3有一个正值,它是位掩码,位掩码值取决于ip标记为的黑名单类型。

在这个例子中,我使用的是一个随机的ip,我知道它在域中被列入黑名单。不幸的是,该脚本不支持TXT查找,但如果您只需要阻止来自列入黑名单的ip地址的连接,则此脚本也是非常基本的。

代码语言:javascript
复制
function rblresolve ($ip = '', $rbldomain = '')
{
        if (!$ip) {return false;}                       // No data should return nothing
        if (!$rbldomain) {return false;}        // No rbl = ignore

        // Old function (during betatesting we want to keep those rows so we can fall back if something fails)
        // $returnthis = explode('.', gethostbyname(implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain));           // Not ipv6-compatible!
        // if (implode(".", $returnthis) != implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain) {return $returnthis;} else {return false;}

        // New ipv6-compatible function
        $returnthis = (long2ip(ip2long($ip)) != "0.0.0.0" ? explode('.', gethostbyname(implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain)) : explode(".", gethostbyname(v6arpa($ip) . "." . $rbldomain)));
        // 127-bug-checking
            if (implode(".", $returnthis) != (long2ip(ip2long($ip)) != "0.0.0.0" ? implode('.', array_reverse(explode('.', $ip))) . '.' . $rbldomain : v6arpa($ip) . "." . $rbldomain)) {return $returnthis;} else {return false;}
}

function v6arpa($ip)
{
        $unpack = unpack('H*hex', inet_pton($ip));
        $hex = $unpack['hex'];
        return implode('', array_reverse(str_split($hex)));
}

$result = rblresolve("117.197.11.203", "dnsbl.tornevall.org");
print_r($result);

正在返回:

代码语言:javascript
复制
Array
(
    [0] => 127
    [1] => 0
    [2] => 0
    [3] => 67

)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20003579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档