尝试嵌套 for 循环以生成 IPv4 地址

Attempting to nest for loops to generate IPv4 Addresses

我需要一些帮助,我正在尝试遍历 ip 范围内的所有 ip,但我遇到了一些问题

我用循环试过了

'pos_1: loop {
        'pos_2: loop {
            'pos_3: loop {
                'pos_4: loop {
                    println!("{}.{}.{}.{}",new_ip[0], new_ip[1], new_ip[2], new_ip[3]);
                    if new_ip[3] == (first_ip[3]+ip_differences[3]) {break 'pos_4;}
                    new_ip[3] += 1;
                }
                if new_ip[2] == (first_ip[2]+ip_differences[2]) {break 'pos_3;}
                new_ip[2] += 1;
            }
            if new_ip[1] == (first_ip[1]+ip_differences[1]) {break 'pos_2;}
            new_ip[1] += 1;
        }
        if new_ip[0] == (first_ip[0]+ip_differences[0]) {break 'pos_1;}
        new_ip[0] += 1;
    }

还有for循环

for i in -1..ip_differences[0] {
        for j in -1..ip_differences[1] {
            for k in -1..ip_differences[2] {
                for l in -1..ip_differences[3] {
                    println!("{}.{}.{}.{}", new_ip[0], new_ip[1], new_ip[2], new_ip[3]);
                    if new_ip[3] == (first_ip[3]+ip_differences[3]) {break;}
                    new_ip[3] += 1;

                }
                if new_ip[2] == (first_ip[2]+ip_differences[2]) {break;}

                new_ip[2] += 1;
            }
            if new_ip[1] == (first_ip[1]+ip_differences[1]) {break;}
            new_ip[1] += 1;
        }
        if new_ip[0] == (first_ip[0]+ip_differences[0]) {break;}
        new_ip[0] += 1;
    }

以上示例的输出:

93.124.176.{...}
93.124.176.248
93.124.176.249
93.124.176.250
93.124.176.251
93.124.176.252
93.124.176.253
93.124.176.254
93.124.176.255
93.124.177.255
93.124.178.255
93.124.179.255
93.124.180.255
93.124.181.255
93.124.182.255
93.124.183.255

还有 while 循环。 我正在使用 break 关键字,因为我不希望该值超过范围的上限。通常,我会假设 break 会中断当前循环,进入上层循环(重新启动内部循环)但感觉就像当我使用 break 时它只是完全中断循环并且再也不会使用。

(不间断new_ip每次递增可以得到0.0.1234)

出于好奇,我尝试在 java 中这样做,看看是我的想法不好,还是我对 rust 的理解...这是我对 rust 的理解。

因为这确实有效:

for (int i = -1; i < ipDifferences[0]; i++) {
            for (int j = -1; j < ipDifferences[1]; j++) {
                for (int k = -1; k < ipDifferences[2]; k++) {
                    for (int l = -1; l < ipDifferences[3]; l++) {
                        System.out.println(String.format("%s.%s.%s.%s", nIP[0], nIP[1], nIP[2], nIP[3]));
                        if (nIP[3]==(firstIP[3]+ipDifferences[3])) {
                            break;
                        }
                        nIP[3]++;
                    }
                    nIP[3]=firstIP[3];
                    if (nIP[2]==firstIP[2]+ipDifferences[2]) {
                        break;
                    }
                    nIP[2]++;
                }
                nIP[2]=firstIP[2];
                if (nIP[1]==firstIP[1]+ipDifferences[1]) {
                    break;
                }
                nIP[1]++;
            }
            if (nIP[0]==firstIP[0]+ipDifferences[0]) {
                break;
            }
            nIP[0]++;
        }

java 改编的输出:

93.124.175.{...}
...
93.124.176.252
93.124.176.253
93.124.176.254
93.124.176.255
93.124.177.15
93.124.177.16
93.124.177.17
...
93.124.177.255

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=bffefca98ffa049422ed35deecd031d7

忘记设置new_ip[3]=first_ip[3];