Perangkat lunak apa yang dapat saya gunakan untuk membalikkan daftar txt rentang-IP? (bukan reverse DNS lookup)

0

Ini adalah daftar blokir, tetapi saya hanya ingin memiliki IP dalam daftar yang diizinkan.

dari pada:

1.2.3.5-1.2.10.20
2.2.3.5-3.2.100.20,

Saya butuh:

0.0.0.0-1.2.3.4
1.2.10.21-2.2.3.4
3.2.100.21-255.255.255.255.

Program atau skrip apa yang dapat saya gunakan untuk melakukan itu?

dgdgtuytutu
sumber

Jawaban:

0

Anda belum menentukan sistem operasi dan alat apa yang Anda gunakan atau memiliki akses. Saya akan berasumsi bahwa Anda menggunakan sistem * nix dan dapat menggunakan skrip shell. Contoh yang Anda berikan mungkin mudah ditangani dengan manipulasi string sederhana, tetapi menyadari bahwa alamat berikutnya setelah 42.17.255.255 adalah 42.18.0.0 sedikit rumit. Saya pikir cara termudah untuk melakukan ini adalah mengubah alamat menjadi bilangan bulat 32-bit, melakukan aritmatika sederhana pada mereka, dan mengubahnya kembali. Jadi inilah skrip shell untuk melakukan itu:

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

Ini menggunakan trik untuk memecah teks pada pembatas menjadi kata-kata, dan menetapkan daftar kata yang dihasilkan ke array. Ia melakukan apa yang saya jelaskan di atas: mengonversi alamat IP ke angka desimal 32-bit, melakukan aritmatika sepele ( / ) pada mereka, dan mengubahnya kembali.array_name=( $(echo "something" | tr "some_character" " ") )-1+1

Jika Anda akan menggunakan ini secara nyata, Anda harus menambahkan pengecekan kesalahan.

Scott
sumber