如何检查包含ip地址的php变量是否位于inet_aton格式的两个ip地址范围内

时间:2017-03-08 11:49:23

标签: php mysql

Query picture我有一个名为黑名单的表,其中包含列start_ip& end_ip,我需要检查我的变量$ stat_ip(来自名为Hasoffers的表中的另一列)是否位于该范围之间,即大于或等于start_ip且小于或等于last_ip,使用mysql查询。我的查询就像这样$ result = mysql_query("选择inet_aton(network_start_ip),inet_aton(network_last_ip)来自列入黑名单的地方'"。$ stat_ip。"' BETWEEN inet_aton( network_start_ip)AND inet_aton(network_last_ip)")。这确实返回0计数,这不是预期的输出。有关mysql查询的帮助表示赞赏。

<?php
include('adodb/adodb.inc.php');
$link=mysql_connect("166.26.18.122","vcc","abcd1234");
mysql_select_db("vcc");
$pl=mysql_query("SELECT stat_ip fromHasoffers");
$count=mysql_num_rows($pl);

while($row=mysql_fetch_array($pl))
{
$stat_ip=$row['stat_ip'];
echo ip($stat_ip)."<br>";
$ip_Num=ip2long($stat_ip);
}

function blacklisted($ip_Num)
{
    $result=mysql_query("Select inet_aton(network_start_ip),inet_aton(network_last_ip) from blacklisted where '".$ip_Num."' BETWEEN  inet_aton(network_start_ip) AND inet_aton(network_last_ip)");
    $count=mysql_num_rows($result);


  return $count;

}
?>

2 个答案:

答案 0 :(得分:1)

您需要在Hasoffers查询中执行inet_aton。像这样

$pl=mysql_query("SELECT inet_aton(stat_ip) from Hasoffers");
$count=mysql_num_rows($pl);

不做inet_aton $ stat_ip有点值。例如192.168.0.1

所以你的第二个查询就像是

Select inet_aton(network_start_ip),inet_aton(network_last_ip) from blacklisted where '192.168.0.1' BETWEEN  inet_aton(network_start_ip) AND inet_aton(network_last_ip)

简而言之,请更改第一个查询,希望它能解决您的问题。

更新

正如您所说,您无法更改查询。 试试这个

$pl=mysql_query("SELECT stat_ip from Hasoffers");    
while($row=mysql_fetch_array($pl))
{
$stat_ip=$row['stat_ip'];
echo ip($stat_ip)."<br>";
//for converting to LongInt
$ip_Num=ip2long($stat_ip);

} 
// Now pass $ip_Num instead of $stat_ip in your function 
function blacklisted($ip_Num)

答案 1 :(得分:1)

你可以将ip2long(ipaddress)功能放在下面的行

        **$ip_Num=str_replace('.','',$stat_ip);**

ip2long 正在运行 inet_aton() mysql函数。 ip2long 是一个php函数 例如:

$ ip = '10 .0.5.9'; printf(“%u \ n”,ip2long($ ip));

167773449