我想知道是否有任何簡單的方法來檢查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