我想知道是否有任何简单的方法来检查IP地址是公开访问还是私有的。是公共IP地址吗?
更具体地说,我知道,例如,127.0.0.1是指向同一台机器的专用IP地址,255.255.255.255(如果用于广播到同一网络中),192.168.1.0用于本地网络地址等。但是,如何区分给定IP地址是否不是私有IP,并且可以公开访问?
我想知道是否有任何简单的方法来检查IP地址是公开访问还是私有的。是公共IP地址吗?
更具体地说,我知道,例如,127.0.0.1是指向同一台机器的专用IP地址,255.255.255.255(如果用于广播到同一网络中),192.168.1.0用于本地网络地址等。但是,如何区分给定IP地址是否不是私有IP,并且可以公开访问?
http://en.wikipedia.org/wiki/Private_network列出了各种范围。只要构造一个if语句。
这是一篇很好的文章。非常感谢:) – 2012-01-11 12:06:22
在RFC 5735中定义了Pulic/private IPv4地址。总之:
对于IPv6,请参阅RFC 5165。简而言之:
注意机器上的服务,而不一个公网IP仍然可以从到达Ť他借助端口转发或其他防火墙规则互联网。
一种解决方案是由Ed提到痊愈,但还有另外一个:
只要连接到一些外部主机并请它替它看到的IP,这样的(例如对于PHP):
$my_public_ip = file_get_contents('http://ip.42.pl/raw');
我知道这个特定的例子将返回只包含一个IP地址的单个字符串。我不知道提供这种服务的其他服务,尽管可能有很多服务。上述脚本/服务的主页是:http://ip.42.pl/。
如果您知道类似的服务,请将其网址发布在评论中,以便将来的读者有其他选择。
这决定了客户的IP地址。不是地址是公开的还是私人的?! – 2016-11-03 23:08:35
function validateIpAddress($ip_addr)
{
$result = true;
if(preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$ip_addr))
{
$parts=explode(".",$ip_addr);
foreach($parts as $ip_parts)
{
if(intval($ip_parts)>255 || intval($ip_parts)<0)
$result=false;
}
if (intval($parts[0])==0 || intval($parts[0])==10 || intval($parts[0])==127 || (intval($parts[0])>223 && intval($parts[0])<240))
{
$result=false;
}
if ((intval($parts[0])==192 && intval($parts[1])==168) || (intval($parts[0])==169 && intval($parts[1])==254))
{
$result=false;
}
if (intval($parts[0])==172 && intval($parts[1])>15 && intval($parts[1])<32)
{
$result=false;
}
}
else
{
$result = false; //if format of ip address doesn't matches
}
return $result;
}
你是否以编程方式执行此操作?如果是这样的话?如果不是,它可能属于superuser.com – 2012-01-11 12:01:06
是的,我喜欢用PHP检查IP。但我问的是,如果有任何一般的插管可以帮助我解决这个问题 – 2012-01-11 12:02:02
http://en.wikipedia。org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses – Flexo 2012-01-11 12:02:28