哪些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地址空间分布系统变得更加分散,这意味着小型私人供应商可以获得IPv4地址范围,而不考虑地理区域。这就是为什么谷歌收购了Urchin,以便他们可以将其服务用于谷歌分析,该分析提供非常准确的IP到地理区域信息。
如果你不想使用像MaxMind(免费供个人使用,数据库在一定程度上是开放的)或Google Analytics(免费供私人使用)这样的服务,就会有免费的(因此总是有点过时)数据库,有时是平面文件。
有各种库,它们具有映射表以及可以合并到代码中的服务。
要理解的最重要的一点是,IP地址和世界任何地方之间都没有直接的关系。地址以大块的形式分配给大致地理位置的组织,这些组织又分配较小的块,对于任何给定的IP地址,这种情况都可能发生在几个级别(Alnitak很好地解释了这个过程)。
事实是:世界卫生组织的数据不一定是准确的。如果我有一个地址块,我可以说它在火星上。即使你缩小了最终组织的位置(比如阿拉斯加的一家非常小的ISP),用户也可能使用夏威夷的拨号,或者服务器可能托管关岛的一家公司。
因此,在将IP地址(或域名)映射到物理位置时,总是存在风险/估计因素。这并不是说你永远不应该这样做,在许多应用程序中,粗糙或不完美的信息非常有用。
注意,数据更新速度通常较慢,甚至复制速度也较慢。几年前,我的工作地点改变了互联网服务提供商,我们被分配了一个以前加拿大的IP地址块(我们的总部位于美国),几个月来,谷歌继续将Google.ca作为我们的默认搜索引擎。大约有一半的时间,我的家庭IP地址来自我所在的城镇,另一半来自另一个州的城镇。
Jason说得对,过程是一样的,但更新更慢,数据也不那么准确。
Alnitak的回答非常中肯。
附带说明一下,如果您想使用.dll来确定用户的位置,那么您可以尝试CodePlex上的此IPAddressExtension。它有一个ISP到各个位置的内部数据库。正如Alnitak上面提到的,每个ISP都有IP块。。所以这些信息都隐藏在.dll:)中
它真的很容易使用。只需引用.dll,然后创建System.Net.IpAddress对象的实例!上面列出了扩展。
我还需要声明我是那个codeplex项目/产品的作者。
请查看:)
编辑:添加了关于我是该产品作者的信息。