是的,我需要知道公共IPv4空间中可能的IP总数。
我不知道在哪里可以获得所有IP地址范围的整齐列表,所以有人可以指向我自己计算资源或计算我的IP总数吗?
此外,通过公共IP,我的意思是不计算保留或私人范围IP地址..只有可以通过互联网访问的IP地址。
根据Reserved IP addresses,有588,514,304个保留地址,因为总共有4,294,967,296(2 ^ 32)个IPv4地址,所以有3,706,452,992个公共地址。
这篇文章中的地址太多了。
https://www.ripe.net/internet-coordination/press-centre/understanding-ip-addressing
对于IPv4,此池的大小为32位(232),包含4,294,967,296个IPv4地址。
在IPv6的情况下
IPv6地址空间大小为128位(2128),包含340,282,366,920,938,463,463,374,607,431,768,211,456个IPv6地址。
包括保留的IP
Reserved address blocks
Range Description Reference
0.0.0.0/8 Current network (only valid as source address) RFC 6890
10.0.0.0/8 Private network RFC 1918
100.64.0.0/10 Shared Address Space RFC 6598
127.0.0.0/8 Loopback RFC 6890
169.254.0.0/16 Link-local RFC 3927
172.16.0.0/12 Private network RFC 1918
192.0.0.0/24 IETF Protocol Assignments RFC 6890
192.0.2.0/24 TEST-NET-1, documentation and examples RFC 5737
192.88.99.0/24 IPv6 to IPv4 relay (includes 2002::/16) RFC 3068
192.168.0.0/16 Private network RFC 1918
198.18.0.0/15 Network benchmark tests RFC 2544
198.51.100.0/24 TEST-NET-2, documentation and examples RFC 5737
203.0.113.0/24 TEST-NET-3, documentation and examples RFC 5737
224.0.0.0/4 IP multicast (former Class D network) RFC 5771
240.0.0.0/4 Reserved (former Class E network) RFC 1700
255.255.255.255 Broadcast RFC 919
只是对Marko答案的一个小修正:由于下一个事实,不能通过一些通用计算直接生成确切的数字:有效的IP地址也不应该以二进制0或1的序列结束,这些序列的长度与子网中的零序列相同面具。所以最终的答案实际上取决于子网的总数(Marko的答案 - 2 *总子网数)。
https://github.com/stephenlb/geo-ip将生成包括地点在内的有效IP公共地址列表。
'1.0.0.0/8'
到'191.0.0.0/8'
是有效的公共IP地址范围,不包括保留的私有IP地址,如下所示:
import iptools
## Private IP Addresses
private_ips = iptools.IpRangeList(
'0.0.0.0/8', '10.0.0.0/8', '100.64.0.0/10', '127.0.0.0/8',
'169.254.0.0/16', '172.16.0.0/12', '192.0.0.0/24', '192.0.2.0/24',
'192.88.99.0/24', '192.168.0.0/16', '198.18.0.0/15', '198.51.100.0/24',
'203.0.113.0/24', '224.0.0.0/4', '240.0.0.0/4', '255.255.255.255/32'
)
生成IP地址和关联的地理信息的JSON转储。请注意,有效的公共IP地址范围是从'1.0.0.0/8'
到'191.0.0.0/8'
,不包括本自述文件中较低的保留的专用IP地址范围。
docker build -t geo-ip .
docker run -e IPRANGE='54.0.0.0/30' geo-ip ## a few IPs
docker run -e IPRANGE='54.0.0.0/26' geo-ip ## a few more IPs
docker run -e IPRANGE='54.0.0.0/16' geo-ip ## a lot more IPs
docker run -e IPRANGE='0.0.0.0/0' geo-ip ## ALL IPs ( slooooowwwwww )
docker run -e IPRANGE='0.0.0.0/0' geo-ip > geo-ip.json ## ALL IPs saved to JSON File
docker run geo-ip
扫描所有有效公共地址的速度更快一些:
for i in $(seq 1 191); do \
docker run -e IPRANGE="$i.0.0.0/8" geo-ip; \
sleep 1; \
done
这会向STDOUT打印少于4,228,250,625个JSON行。以下是其中一行的示例:
{"city": "Palo Alto", "ip": "0.0.0.0", "longitude": -122.1274,
"continent": "North America", "continent_code": "NA",
"state": "California", "country": "United States", "latitude": 37.418,
"iso_code": "US", "state_code": "CA", "aso": "PubNub",
"asn": "11404", "zip_code": "94107"}
上面的repo中的dockerfile将根据维基百科文章的指南排除不可用的IP地址:https://en.wikipedia.org/wiki/Reserved_IP_addresses
dockerfile导入https://www.maxmind.com/en/home提供的免费公共数据库