Это черный список, но я хочу, чтобы в списке был только 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 ответ1

0

Вы не указали, какую операционную систему и инструменты вы используете или имеете доступ.  Я предполагаю, что вы работаете в системе * nix и можете использовать скрипт оболочки.  Приведенный вами пример может быть легко обработан с помощью простой манипуляции со строками, но понимание того, что следующий адрес после 42.17.255.255 - это 42.18.0.0, немного сложнее.  Я думаю, что самый простой способ сделать это - преобразовать адреса в 32-разрядные целые числа, выполнить простую арифметику с ними и преобразовать их обратно.  Итак, вот сценарий оболочки для этого:

#!/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"

Он использует array_name =($(эхо «что - array_name=( $(echo "something" | tr "some_character" " ") ) трюк , чтобы разбить текст на части по разделителей в слова, и присвоить полученный список слов в массив.  Он делает то, что я описал выше: преобразует IP-адреса в 32-разрядные десятичные числа, выполняет тривиальную ( -1/+1 ) арифметику с ними и преобразует их обратно.

Если вы собираетесь использовать это по-настоящему, вы должны добавить проверку ошибок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .