perl - 如何检查Perl中的IP地址是否在特定范围内?

标签 perl ip cgi ip-address

我正在用perl编写CGI脚本。
如何检查一个IP地址,例如124.21.23.5,范围为100.0.0.0-200.79.255.255?

我获取IP地址的方式是:

    my $ip = $ENV{'REMOTE_ADDR'};

最佳答案

使用 Net::IP overlaps方法:

use strict;
use warnings;

use Net::IP;

my $range = Net::IP->new('100.0.0.0 - 200.79.255.255') or die Net::IP::Error();

while (<DATA>) {
    chomp;
    my $ip = Net::IP->new($_) or die Net::IP::Error();
    my $match =  $range->overlaps($ip) ? "(match)" : "";
    print "$_ $match\n";
}

__DATA__
10.0.0.1
99.99.99.99
100.0.0.1
124.21.23.5
200.79.255.1
200.80.1.1

输出:
10.0.0.1
99.99.99.99
100.0.0.1 (match)
124.21.23.5 (match)
200.79.255.1 (match)
200.80.1.1

关于perl - 如何检查Perl中的IP地址是否在特定范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916371/

相关文章:

linux - Perl 在远程机器上执行 bash 脚本的错误输出行为

perl - 子程序结束时私有(private)变量会发生什么?

Python - 我如何知道何时按下表单按钮? (登出)

perl - 像自动死亡一样死去

linux - 为什么我的线程化 Perl 脚本会出现段错误?

awk - sed/awk + ​​regex 删除第一个字段匹配的重复行(ip 地址)

amazon-web-services - 如何验证无效的 CIDR block ?

ip - SSL 中的 "Socket Layer"到底指的是什么?

apache - PERL Dancer2、cgi 调度程序和 uri_for 助手

python - 如何在web2py中访问临时上传的文件?