我有一个文件,其内容是这样的
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
依旧......
答案 0 :(得分:1)
您可以将开头和结尾IP转换为32位数,以+1
为增量迭代其范围,并将结果数字转换回IP格式。
答案 1 :(得分:1)
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);
答案 2 :(得分:0)
到目前为止,您尝试过哪些实施方案?你有可以展示的代码吗?
您始终可以使用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);