我正在浏览ARIN whois API以查找所有网络范围。下面的代码采用起始IP地址,将其发送到ARIN,并返回该网络的结束IP地址。然后该结束地址加1,这个新值成为发送到ARIN的下一个地址。这种方法效果很好,但是当ISP有大量未分配的地址时效率很低,因为必须检查每个起始地址,直到找到另一个分配的网络。
代码是一个独立的示例,显示如何分配一些网络范围,然后显示AT& T未分配的一段地址。如何在不检查每个地址的情况下检查这些未分配的网络?
import requests
from ipaddress import ip_address
IPAddress = str.replace('12.31.71.56','.','-')
while True:
try:
url = 'https://whois.arin.net/rest/net/NET-' + IPAddress + '-1.json'
request = requests.get(url)
response = request.json()
endAddress = response['net']['endAddress']['$']
IPAddress = str.replace((ip_address(endAddress) + 1).compressed,'.','-')
print(IPAddress)
print(response['net']['orgRef']['@name'])
except ValueError:
IPAddress = str.replace(IPAddress,'-','.')
IPAddress = str.replace((ip_address(IPAddress) + 1).compressed,'.','-')
print(IPAddress)
if IPAddress == '12-31-71-150':
break