我们的系统中有一个Perl脚本,用于验证来自我们组的IP地址。该脚本是由以前的开发人员开发的,我对Perl不太精通。我们有一组IP,这些IP是硬编码的,在执行操作之前会进行检查。以下是代码片段(示例):
unless ($remoteip eq "some ip" || $remoteip eq "some IP" || $remoteip eq "xx.xx.xx.xx" )
现在,我想再添加50个IP地址,这些地址都在范围内(xx.xx.xx.145到xx.xx.xx.204),我不想在Unless语句中逐个添加它们,因为这样会很长,不利于编程(我想)。有没有什么方法可以为IP地址添加“小于”或“大于”语句?类似于除非($remoteip〈=“xx.xx.xx.204”AND $远程IP地址〉=“xx.xx.xx.145“)。
谢谢。
3条答案
按热度按时间kknvjkwl1#
把四元数转换成32位整数,你就可以设置了。CPAN上有一些模块可以帮你做这件事,但它归结起来像这样
例如,
111.222.233.244
被转换为1876879860
(0x6fdee9f4
,01101111110111101110100111110100
),因此您不仅可以比较(排序)地址,还可以对其应用位掩码。uqjltbpv2#
您可以使用Socket模块和inet_aton方法,将一个范围转换为一个数组,并通过该数组执行grep。
然后跑
bzzcjhmw3#
自己处理逻辑并不是一件大事,但正如前面所指出的,CPAN模块也可以为您完成这一工作。在本例中,为了简化输出,我缩短了范围的长度:
输出为: