首页 > 解决方案 > 在 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 有效,所以这些不是我目前想要的解决方案。

标签: python

解决方案


您可以使用 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

推荐阅读