【问题标题】:Find all the IPs between a range of IPs [closed]查找一系列 IP 之间的所有 IP [关闭]
【发布时间】:2013-12-19 13:46:21
【问题描述】:

我有一个文件,其内容是这样的

 164.91.32.120 164.91.32.123
 164.91.32.127 164.91.32.128
 164.91.32.131 164.91.32.132
 164.91.32.137 164.91.32.200
 164.91.33.20 164.91.33.161

找出范围之间的所有 IP 并使用 shell 脚本在这样的文件中打印输出的任何方法

 164.91.32.120
 164.91.32.121
 164.91.32.122
 164.91.32.123
 164.91.32.127
 164.91.32.128
 164.91.32.131

等等……

【问题讨论】:

标签: perl shell awk grep cut


【解决方案1】:

您可以将开始和结束 IP 转换为 32 位数字,以 +1 为增量迭代它们的范围,并将结果数字转换回 IP 格式。

【讨论】:

    【解决方案2】:

    到目前为止,您尝试了哪些实现方式?你有任何代码可以显示吗?

    您始终可以使用 Perl 读取文本文件,在 IP 范围之间的空格/制表符处拆分,然后进行字符串解析。

    例子:

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open(INPUT_FILEHANDLE, "myfile.txt") or die("$!");
    open(OUTPUT_FH, ">>outfile.txt") or die("$!");
    while(chomp(my $line = <INPUT_FILEHANDLE>)) {
        my @split = split(" ", $line);
        my @octets_first = split(".", $split[0]);
        my @octets_second = split(".", $split[1]);
        my $subnet = $split[0].$split[1].$split[2];
        my $difference = $octets_second[3] - $octets_first[3];
        for(my $i = $octets_first[3]; $i < $difference; $i++) {
            print OUTPUT_FH $subnet.$i;
            print OUTPUT_FH "\n";
        }
    }
    close(INPUT_FILEHANDLE);
    close(OUTPUT_FH);
    

    【讨论】:

    • @falconspy..我还没有尝试过任何东西..正在尝试使用相同的逻辑在 shell 中编写一些东西..使用点分割八位字节..减去最后一个八位位组,然后运行一个循环通过 ips ..我尝试了您提供的 perl 脚本并收到以下错误.. # perl splitip Name "main::FILEHANDLE" 仅使用一次:splitip 第 7 行可能出现错字。 readline() 在 splitip 处未打开的文件句柄 FILEHANDLE第 7 行。在 splitip 第 7 行的 chomp 中使用未初始化的值。
    • @Amistad 请看我的编辑。我忘记更改行 while(chomp(my $line = )) 以反映我所做的更改 - while(chomp(my $line = ))。请注意,我也没有测试我的代码。
    • @Amistad 我上面链接的问题有您问题的答案,并附有代码示例。这就是重复的意思:它已经被回答了。所以去那里看看答案吧。
    【解决方案3】:

    IPv4 地址只是 32 位数字。

    sub ip_to_num { unpack 'N', pack 'C4', split /\./, $_[0] }
    sub num_to_ip { join '.', unpack 'C4', pack 'N', $_[0] }
    
    say num_to_ip($_) for ip_to_num($ip_from) .. ip_to_num($ip_to);
    

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2011-07-21
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多