python - 在 Python 中生成所有可能的(公共互联网)IPV4 地址组合
问题描述
我的目标是遍历所有可能的 ipv4 地址,这些地址可以在 Python 中用于网络(如计算机、物联网设备等,而不是专用网络)组合。在我搜索的过程中,我找到了几个解决方案:
1:使用while循环并循环遍历可能的组合(但是,不确定这会停止,我从现在找不到的C中的stackoverflow移植了它):
i = 0
while(i != -1):
b1 = (i >> 24) & 0xff
b2 = (i >> 16) & 0xff
b3 = (i >> 8) & 0xff
b4 = (i >> 4) & 0xff
i += 1
2:使用for
循环:我在 bash 问题中找到了这段代码:bash - Generate all possible ipv4 addresses using seq
(c代码):
int main() {
int h, i, j, k;
for (h = 0; h < 256; h++) {
for (i = 0; i < 256; i++) {
for (j = 0; j < 256; j++) {
for (k = 0; k < 256; k++) {
printf("%d.%d.%d.%d\n", h, i, j, k);
}
}
}
}
return 0;
}
我想知道是否有更好的方法来做到这一点?这两种实现都允许 0.0.0.0 和私有 ip 有效,所以这些不是我目前想要的解决方案。
解决方案
您可以使用 ipaddress,它在标准库中。is_private 将排除 RFC1918 地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)以及其他一些地址。
import ipaddress
all_ipv4 = ipaddress.ip_network('0.0.0.0/0')
for host in all_ipv4.hosts():
if host.is_private:
continue
print(host) #do your thing here
推荐阅读
- c# - Asp.net 表格宽度不超过 100%
- javascript - 可拖动的可编辑字段
- javascript - JavaScript 错误未显示在控制台中
- azure - 如何在 ARM 模板的单个 NSG SecurityRule 中使用多个目标端口
- php - 无法在 laravel 5.4 中使用 sqlsrv(找不到驱动程序)迁移数据库
- snakemake - Snakemake:导出 d3dag - MissingInputException
- wordpress - 添加产品时,Woocommerce 产品类别丢失(不显示)
- javascript - 在 Laravel 中验证前后使用 javascript 添加表单元素
- javascript - 世博会缺少相机胶卷权限
- android - 延迟注册的 Java c++ 本机函数