查找50英里内给定IP地址的准确位置

时间:2013-03-11 12:28:42

标签: php map ip-address zipcode

在我的页面中,我使用了查找给定IP地址的Geolocation的功能。这将返回带有zipcode的特定位置的结果。

但是这个邮政编码并不准确。我从编码和真实位置获得的zipcodes的差异大约超过200英里。我使用了ip2location网站的以下代码。

require_once('ip2location.class.php');

$ip = new ip2location;
$ip->open('./databases/IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-SAMPLE.BIN');

$record = $ip->getAll('50.178.183.243');

echo '<b>IP Address:</b> ' . $record->ipAddress . '<br>';
echo '<b>IP Number:</b> ' . $record->ipNumber . '<br>';
echo '<b>Country Short:</b> ' . $record->countryShort . '<br>';
echo '<b>Country Long:</b> ' . $record->countryLong . '<br>';
echo '<b>Region:</b> ' . $record->region . '<br>';
echo '<b>City:</b> ' . $record->city . '<br>';
echo '<b>ISP/Organisation:</b> ' . $record->isp . '<br>';
echo '<b>Latitude:</b> ' . $record->latitude . '<br>';
echo '<b>Longitude:</b> ' . $record->longitude . '<br>';
echo '<b>Domain:</b> ' . $record->domain . '<br>';
echo '<b>ZIP Code:</b> ' . $record->zipCode . '<br>';
echo '<b>Time Zone:</b> ' . $record->timeZone . '<br>';
echo '<b>Net Speed:</b> ' . $record->netSpeed . '<br>';
echo '<b>IDD Code:</b> ' . $record->iddCode . '<br>';
echo '<b>Area Code:</b> ' . $record->areaCode . '<br>';
echo '<b>Weather Station Code:</b> ' . $record->weatherStationCode . '<br>';
echo '<b>Weather Station Name:</b> ' . $record->areaCode . '<br>';
echo '<b>MCC:</b> ' . $record->mcc . '<br>';
echo '<b>MNC:</b> ' . $record->mnc . '<br>';
echo '<b>Mobile Brand:</b> ' . $record->mobileBrand . '<br>';
?>

我在很多网站上尝试过编码,例如

但我没有得到实际的结果。在上述网站中找不到准确的邮政编码以获取IP地址。任何人都可以帮我解决这个问题。感谢您提前阅读并解决此问题。

1 个答案:

答案 0 :(得分:5)

这是设计上的朦胧,你无法轻易修复。基于IP的地理定位服务只能使用从服务器到目标IP的各个点猜测的位置信息。 (当您在控制台上执行traceroute <targetip>时,可以看到这些点)。 IP地理定位的确切程度取决于用户的ISP架构,某些区域的结果可能方式关闭,但在其他区域(尤其是城市)则非常精确。

如果您真的需要确切的地理定位,请使用client-side HTML 5 geolocation。这需要用户的同意,如果客户端设备没有GPS,也可能不精确。