我可以使用什么软件来反转 txt 列表 IP 范围?(不是反向 DNS 查找)

我可以使用什么软件来反转 txt 列表 IP 范围?(不是反向 DNS 查找)

这是一个黑名单,但我希望只有列表中的 IP 才被允许。

代替:

1.2.3.5-1.2.10.20
2.2.3.5-3.2.100.20,

我需要:

0.0.0.0-1.2.3.4
1.2.10.21-2.2.3.4
3.2.100.21-255.255.255.255.

我可以使用什么程序或脚本来做到这一点?

答案1

您尚未指定您正在使用或可以访问的操作系统和工具。我假设您使用的是 *nix 系统并且可以使用 shell 脚本。您给出的示例可能很容易通过简单的字符串操作来处理,但要意识到 42.17.255.255 之后的下一个地址是 42.18.0.0 有点棘手。我认为最简单的方法是将地址转换为 32 位整数,对它们进行简单的算术运算,然后再转换回来。因此,这里有一个 shell 脚本可以做到这一点:

#!/bin/sh
ip_to_dec()
{
        octets=( $(echo "$1" | tr "." " ") )
        echo $(( (((${octets[0]}*256)+${octets[1]})*256+${octets[2]})*256+${octets[3]} ))
}

dec_to_ip()
{
        n=$1
        d=$((n%256))
        n=$((n/256))
        c=$((n%256))
        n=$((n/256))
        b=$((n%256))
        a=$((n/256))
        echo "$a.$b.$c.$d"
}

my_args=( $(echo "$1 $2" | tr "-" " ") )
for ((i=0; i<4 ; i++))
do
        my_arg_dec[i]=$(ip_to_dec "${my_args[i]}")
done
my_arg_dec[0]=$(( my_arg_dec[0]-1 ))
my_arg_dec[1]=$(( my_arg_dec[1]+1 ))
my_arg_dec[2]=$(( my_arg_dec[2]-1 ))
my_arg_dec[3]=$(( my_arg_dec[3]+1 ))

echo "0.0.0.0-$(dec_to_ip ${my_arg_dec[0]})" \
     "$(dec_to_ip ${my_arg_dec[1]})-$(dec_to_ip ${my_arg_dec[2]})" \
     "$(dec_to_ip ${my_arg_dec[3]})-255.255.255.255"

它使用技巧将文本按分隔符拆分为单词,并将生成的单词列表分配给数组。它执行我上面描述的操作:将 IP 地址转换为 32 位十进制数字,对其进行简单的 ( / ) 运算,然后将其转换回来。array_name=( $(echo "something" | tr "some_character" " ") )-1+1

如果您要真正使用它,您应该添加错误检查。

相关内容