哪些 IP 分配给哪些 ISP 公开信息?地理 IP 服务如何获取这些信息并维护这些信息?
在不使用这些服务之一的情况下,我如何亲自找出某个 IP 所属的位置?
哪些 IP 分配给哪些 ISP 公开信息?地理 IP 服务如何获取这些信息并维护这些信息?
在不使用这些服务之一的情况下,我如何亲自找出某个 IP 所属的位置?
值得一提的是,我在 ISP 行业的高级职位工作了十多年,所以我在这方面有相当多的经验。
IANA会根据需要将大型 IP 范围分配给每个地区互联网注册管理机构。
这些区域的大小通常是大陆性的 - IP 地址 不是按国家/地区分配的。
然后,RIR 将 IP 地址分配给 ISP,ISP 又将它们分配给最终用户。
每个 RIR 都维护一个whois
服务器,可以查询该服务器不仅可以查明哪个 ISP 已分配了任何网络块,还可以在一定程度上查明哪个最终用户以及该最终用户的地址。
请注意,许多 ISP 不会为每个客户填写此信息。因此,如果您是 DSL 服务的住宅用户,地理记录可能会提供您的 ISP 的地址,而不是您自己的地址。
各种 GeoLocation 提供商主要通过挖掘这些whois
记录来工作。请注意,这样做的合法性是一个灰色地带 - RIPE 的数据库版权声明在这里。
IANA 还维护 DNS 的根区域,但它与任何 IP 分配功能完全分开。保持域名操作和IP地址之间的区别非常重要。
有多种库具有映射表以及可以合并到代码中的服务。
要了解的最重要的事情是,IP 地址与世界任何地方之间没有直接关系。这些地址以大块的形式分配给大致地理上的组织,这些组织又分配较小的块,对于任何给定的 IP 地址,这可能发生在多个级别(Alnitak 很好地解释了该过程)。
事实是:WHOIS 数据不一定要准确。如果我有一个地址块,我可以说它在火星上。即使您缩小最终组织的位置(比如阿拉斯加的一个非常小的 ISP),用户也可能使用来自夏威夷的拨号,或者服务器可能托管来自关岛的公司。
因此,在将 IP 地址(或域名)映射到物理位置时,总是存在风险/估计因素。这并不是说您永远不应该这样做,在许多应用程序中,粗糙或不完善的信息非常有用。
回答关于“它是如何工作的”的具体问题:涉及大量体力劳动,并且数据库在很大程度上是手动维护的。正如其他答案所指出的那样,IP范围和国家之间没有真正的相关性,更不用说特定地区了。最近,IP 地址空间分配系统更加分散,这意味着小型私人供应商可以获取 IPv4 地址范围,而不受地理区域的影响。这就是谷歌收购 Urchin 的原因,以便他们可以将他们的服务用于谷歌分析,该分析提供非常准确的 IP 到地理区域的信息。
如果您不想使用MaxMind(个人免费使用,并且数据库在一定程度上是开放的)或Google Analytics(个人免费使用)之类的服务,则有免费的(因此总是有些过时的)数据库在四处游荡,有时作为平面文件。
请注意,数据的更新速度通常很慢,复制速度甚至更慢。几年前,我的工作地点改变了 ISP,我们被分配了一组以前的加拿大 IP 地址(我们位于美国),几个月来,谷歌继续将 google.ca 作为我们的默认搜索引擎。大约 1/2 的时间我的家庭 IP 地址来自我的城镇,另外 1/2 来自另一个州的城镇。
Jason 说得对,流程相同,但更新速度更慢,数据更不准确。
Alnitak 的回答非常符合要求。
作为旁注,如果您想使用 .dll 来确定用户的位置,那么您可以尝试在CodePlex上找到的这个IPAddressExtension。它有一个 ISP 到位置的内部数据库。正如 Alnitak 上面提到的,每个 ISP 都有 IP 块 .. 所以这些信息都隐藏在 .dll 中:)
它真的很容易使用。只需引用 .dll,然后创建System.Net.IpAddress对象的实例!扩展名列在上面。
我还需要声明我是那个 codeplex 项目/产品的作者。
请检查一下 :)
编辑:添加了有关我是该产品作者的信息。