我正在尝试计算一个IP在数组函数"dnsblookup“中出现的命中次数。如果该IP出现3次,则应回显3| 10,其中10为数组中黑名单数据库的总数。我的代码为每个IP返回"1|10“,即使它在阵列的黑名单数据库中出现多次。我不知道我在哪里弄错了。我需要帮助来完成这个项目。谢谢。我在遇到问题的代码前放了多个星号(*)。
<?php
function dnsbllookup($ip)
{
$dnsbl_lookup = array (
"dnsbl-1.uceprotect.net","all.s5h.net","wormrbl.imp.ch",
"dnsbl-2.uceprotect.net","blacklist.woody.ch",
"dnsbl-3.uceprotect.net","combined.abuse.ch","dnsbl.spfbl.net",
"dnsbl.dronebl.org","http.dnsbl.sorbs.net");
$list = "";
if ($ip) {
$reverse_ip = implode(".", array_reverse(explode(".", $ip)));
foreach ($dnsbl_lookup as $host) {
if (checkdnsrr($reverse_ip . "." . $host . ".", "A")) {
$list .= implode(".", array_reverse(explode(".",$reverse_ip))) . ' <font color="red">
<strong>is Listed in </strong></font>'. $host . '<br />';
}
}
}
if (empty($list)) {
echo 'No record was not found in the IP blacklist database for: '.$ip;
echo $list;
echo "<br>";
echo "0";
echo "|";
echo count($dnsbl_lookup);
********************
} else {
$list1 = explode(" ", $list);
echo ($list);
echo "<br>";
echo "Blacklisted: ".count($list1);
echo "|";
echo count($dnsbl_lookup);
}
}发布于 2020-02-10 15:58:56
您应该降低复杂性,并使用字符串插值,以便更容易阅读和调试。
function dnsbllookup($ip)
{
$dnsbl_lookup =
[
'dnsbl-1.uceprotect.net', 'all.s5h.net', 'wormrbl.imp.ch',
'dnsbl-2.uceprotect.net', 'blacklist.woody.ch',
'dnsbl-3.uceprotect.net', 'combined.abuse.ch', 'dnsbl.spfbl.net',
'dnsbl.dronebl.org', 'http.dnsbl.sorbs.net'
];
$dns_count = count($dnsbl_lookup);
$list = [];
if ($ip)
{
$reverse_ip = implode(".", array_reverse(explode(".", $ip)));
foreach ($dnsbl_lookup as $host)
if (checkdnsrr("$reverse_ip.$host.", "A"))
$list[] = "$ip <font color=\"red\"><strong>is Listed in </strong></font> $host<br />\n";
}
$list_count = count($list);
if (0 === $list_count)
echo "No record was not found in the IP blacklist database for: $ip<br>\n";
else
{
$list_str = implode(" ", $list);
echo "$list_str<br>\nBlacklisted: $list_count<br>\n";
}
echo "$list_count|$dns_count\n";
}
dnsbllookup('54.201.153.20'); // 3 entries
dnsbllookup('185.12.225.17'); // 1 entryhttps://stackoverflow.com/questions/60145180
复制相似问题