IP地址转CIDR/IP范围

5
有没有人知道一个API/脚本,可以给我提供一个IP地址所在的网络CIDR,而不是IP范围?
背景:有个骗子在我的网站上注册并使用代理或虚拟主机来隐藏他的IP地址或伪造他的IP位置。现在仅仅禁用他的IP地址已经没有太大意义了,我想要锁定整个主机的网络来防止他再次注册。因此,我需要进行一个IP Whois查询以获取该网络的CIDR。我希望能够自动化这个过程。
1个回答

8
IP地址由本地互联网注册机构(LIRs)分配给最终用户。 LIRs需要在其适当的区域互联网注册机构(RIRs)数据库中注册任何分配的地址空间的各种详细信息。有5个RIRs(ARIN,RIPE NCC,APNIC,LACNIC和AfriNIC)负责世界上不同的地区。据我所知,它们都提供RESTful API,您可以使用它来获取所需的信息。
例如,如果IP来自欧洲,则可以使用RIPE API搜索与某个IP地址相关的inetnum或route对象:

http://rest.db.ripe.net/search?query-string=194.79.41.40

whois-resource中,您将获得多个对象,对您最有兴趣的是route对象:

<object type="route">
 <link xlink:type="locator" xlink:href="http://rest.db.ripe.net/ripe/route/194.79.40.0/22AS35796"/>
 <source id="ripe"/>
 <primary-key>
  <attribute name="route" value="194.79.40.0/22"/>
  <attribute name="origin" value="AS35796"/>
 </primary-key>
 <attributes>
  <attribute name="route" value="194.79.40.0/22"/>
  <attribute name="descr" value="NBS"/>
  <attribute name="origin" value="AS35796" referenced-type="aut-num">
   <link xlink:type="locator" xlink:href="http://rest.db.ripe.net/ripe/aut-num/AS35796"/>
  </attribute>
  <attribute name="mnt-by" value="NBS-MNT" referenced-type="mntner">
   <link xlink:type="locator" xlink:href="http://rest.db.ripe.net/ripe/mntner/NBS-MNT"/>
  </attribute><attribute name="source" value="RIPE" comment="Filtered"/>
 </attributes>
</object>

请记住,此路由对象可能是一个比用户实际所属的更大的摘要范围,但这是您可以得到的最好结果。
检查以下链接以获取其他RIRs:
- AFRINIC(非洲):afrinic.net - APNIC(亚太地区):apnic.net - ARIN(北美):arin.net - LACNIC(拉丁美洲和加勒比海地区):lacnic.net

编辑: 我应该在原回答中提到这一点,但我被API部分分散了注意力。实际上,在所有这些背后,其实是一个非常简单的whois协议,特别是如果您正在处理需要一些工作来解析JSON或XML的编程语言。

Whois协议使用TCP端口43,并且连接到服务器后,您只需要发送搜索键(在您的情况下为IP地址)。 您将获得响应,服务器将终止连接。 就这样。 您可以尝试telnet whois.ripe.net 43 ,打开连接后只需发送194.79.41.40 或RIPE NCC发行的其他IP。

whois存在的问题之一是没有一个中央数据库可以查询并始终获得结果,而是需要查询发行特定IP的RIR。但即使您“错过”了正确的RIR和查询(例如)whois.iana.org以获取RIPE NCC发布的地址,您也将获得具有正确whois服务器和发行IP的组织(RIR)的响应。因此,您可以检查用户的地理位置统计信息并优先考虑最有可能为您提供结果的一个whois服务器,或使用响应选择第二个要查询的服务器。
另一个问题是响应没有标准化,因此您必须为5个whois服务器中的每一个创建响应解析器。

中央数据库基本上是https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml,因为IANA首先向RIR分配块(IPv6地址当然也是如此)。但是它上面没有whois服务器。 - Patrick Mevzek
现在随着RDAP的出现,情况有所改变,您可以使用以下链接:http://data.iana.org/rdap/ipv4.json 和 http://data.iana.org/rdap/ipv6.json;RDAP客户端可以使用它们自动查找适当的RIR RDAP服务器。 - Patrick Mevzek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接