按州(地理位置)划分的 IP 前缀
您正在寻找“地理位置”数据库。(我使用的一个例子是Max Mind的产品。)
问题在于实施细节。db 产品旨在以编程方式使用。例如,给定一个 IP 地址列表,我们想知道状态,或纬度/经度,国家等。你当然可以写一些东西(例如一些 Perl 代码。但产品带有许多语言的示例库)吐出所有 IP 地址、网络,无论是给定的州或邮政编码。您必须查看 db 产品以查看哪些产品以您可以使用的方式进行组织。然后你必须对那个列表做一些事情。
或者,您可以做一些动态的事情。连接到您的 Web 服务器或服务器防火墙等,以便根据地理位置数据库动态查找数据包(dbs 是您定期更新的本地数据文件 [例如每月]),然后做出决定,或插入防火墙规则.
这一切都不容易,但绝对可行。
简短的回答是,正确地做到这一点实际上是不可能的。
长的答案是,您很可能需要与 GeoIP 公司(例如 MaxMind)交谈。好的 API 有很好的 API,你可以使用它,让你可以按不同的区域级别进行查询。
GeoIP 的最大问题是准确性。许多这些 GeoIP 数据库中包含明显不正确的信息。在没有网络内部知识的情况下,很难准确地确定使用特定前缀的位置。例如,没有确定的方法可以知道某个前缀是否已委托给客户,并且该客户是否将其从三个州拖回分支机构。
最后,查询大型 GeoIP 数据库并从中构建防火墙规则等通常是一项简单的任务。只是你永远无法确定准确性。
如果很难获得位置和 IP 地址之间的准确映射,那么替代解决方案可能不是通过 API 依赖来自手机 GPS 硬件的客户端位置信息吗?
例如,Twitter 的 API 似乎允许这种可能性。
我意识到这可能需要比你看起来更多的时间来实现(“问题是它必须在明天之前准备好......”),但因为这里似乎普遍同意地理定位数据库将非常容易出错,我认为替代位置源可能更准确(尽管我意识到许多客户端请求中也没有,甚至可能是欺骗性的)。
不管怎样,只要我的 0.02 美元。
除非您想进入 GEO-IP 制图业务,否则请将其留给专业人士。它永远不会是 100%,准确率最多可能接近 70-80%。客户端前面的代理可能会掩盖其实际位置,因为代理 IP 会有所不同。如果您的应用程序是 HTTP,则某些内容交付网络 (CDN)(如果您使用)能够将地理信息嵌入到您的 Web 应用程序的 HTTP 请求标头中,以便做出阻止决定。同样,一些 CDN 代理整个站点,因此连接到您的 IP 永远不会与真实客户端相同。