我必须遍历perl中的一系列ip地址,并打印该范围内所有ip的列表。为前 - 为
192.168.122.1-192.168.122.4
我的返回值是
192.168.122.1, 192.168.122.2, 192.168.122.3, 192.168.122.4
此外,我无法使用Net::IP
或Netmask
模块,因此找到其他方法进行迭代。
以下解决方案有效但有一些问题我似乎无法弄清楚 -
1 - 我的开始和结束将是perl变量“”,而不是在下面的代码中提到的。以下代码不适用于start =“192.168.122.1”
2 - 如何获得最后附加的所有ips的列表?
sub inc_ip { $_[0] = pack "N", 1 + unpack "N", $_[0] }
my $start = 192.168.122.1;
my $end = 192.168.122.4;
for ( $ip = $start; $ip le $end; inc_ip($ip) ) {
printf "%vd\n", $ip;
}
答案 0 :(得分:0)
你似乎想要:
use Socket 'inet_aton';
my $start = "192.168.122.1";
my $end = "192.168.122.4";
my @x = map { sprintf "%vi", pack "N", $_ } unpack("N",inet_aton($start)) .. unpack("N",inet_aton($end));
use DDP; p @x;
答案 1 :(得分:0)
使用Net::IP。从CPAN文档:
my $ip = new Net::IP ('195.45.6.7 - 195.45.6.19') || die;
# Loop
do {
print $ip->ip(), "\n";
} while (++$ip);
这种方法更灵活,因为Net :: IP接受CIDR表示法,例如193.0.1 / 24并且还支持IPv6。