LINUX.ORG.RU

Как преобразовать диапазоны ip в список?

 


0

1

Есть диапазоны ip адресов, допустим от 1.1.1.1 до 255.255.255.255, как можно преобразовать его в список ip адресов? То есть все возможные варианты из этого промежутка.

Ну либо от 1.1.1.1 до 1.255.255.255.

нашел тему на форуме, вот нужно именно то о чем пишет автор Подскажите генератор диапазона IP

кто сможет помочь, закину $10 на биткоин)



Последнее исправление: Proxerboss (всего исправлений: 2)
#!/bin/bash
hostmin=$1
hostmax=$2

echo -e "$hostmin"
echo -e "$hostmax"

mino1=$(echo $hostmin  | gawk -F. '{print $1}')
mino2=$(echo $hostmin  | gawk -F. '{print $2}')
mino3=$(echo $hostmin  | gawk -F. '{print $3}')
mino4=$(echo $hostmin  | gawk -F. '{print $4}')

maxo1=$(echo $hostmax  | gawk -F. '{print $1}')
maxo2=$(echo $hostmax  | gawk -F. '{print $2}')
maxo3=$(echo $hostmax  | gawk -F. '{print $3}')
maxo4=$(echo $hostmax  | gawk -F. '{print $4}')


#echo -e $mino1 $mino2 $mino3 $mino4
#echo -e $maxo1 $maxo2 $maxo3 $maxo4

for mo1 in `seq $mino1 $maxo1`
    do
for mo2 in `seq $mino2 $maxo2`
    do
for mo3 in `seq $mino3 $maxo3`
    do
for mo4 in `seq $mino4 $maxo4`
    do
echo "$mo1.$mo2.$mo3.$mo4"
done
done
done
done

А теперь давай 10$
Вот номер кошелька, если не увижу, то ты говнюк.

BTC
12WFM3nJHmAHraiLhXn5Qw51fkNBweSKjR

Запускать так
Пример
chmod +x ./script.sh
./script.sh 1.1.1.1 255.255.255.255
Диапазоны указываешь какие угодно.

sin-ok
()
Последнее исправление: sin-ok (всего исправлений: 1)
Ответ на: комментарий от anonymous

А ты добрый.

./ipd.sh 192.168.1.1 192.168.1.10  
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10
Задавай кусками и все будет хорошо. За 10$ несуществующих да еще и виртуальных, лучше не будет.

sin-ok
()
Ответ на: комментарий от Hein
echo -e {1..255}.{1..255}.{1..255}.{1..255} | tr " " "\n"
bash: xmalloc: .././braces.c:762: cannot allocate 18446744073175818256 bytes (669487104 bytes allocated)

Халтура.

anonymous
()
Ответ на: комментарий от anonymous

Но запросов то таких не был изначально! :) И да, платить мне не надо, даже если смог завести.

Hein
()

У Sendmail в контрибе лежит перловый скрипт, который разворачивает x.x.x.x/yy в нотацию, которую понимает Sendmail. Но там возможны варианты «10.10», «10.10.10». То есть, «10.10.0.0/16» развернётся в «10.10.1», «10.10.2» и так далее. Но там Perl, чуть допишешь.

AS ★★★★★
()

Нафига преобразовывать?

Вообще просто преобразовать в int и проинкрементить, с обратным преобразованием, если прям в текстовом виде надо. Хотя в бинарном весь диапазон займёт всего 16 гигов.

anonymous
()
nmap -n -sL 10.10.64.0/27 | awk '/report/{print $NF}'

или

nmap -n -sL 10.10.64.1-200 | awk '/report/{print $NF}'
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

поучаствую в олимпиаде

#!/usr/bin/python3

import sys

def ip2bin(ip):
    l = [int(i) for i in ip.split('.')]
    return int.from_bytes(l, 'big')
    
def bin2ip(bip):
    b = bip.to_bytes(4, 'big')
    return '.'.join(str(i) for i in b)
    
def ip_range(ip_from, ip_to):
    bip_from = ip2bin(ip_from)
    bip_to = ip2bin(ip_to)
    for ip in range(bip_from, bip_to+1):
        print(bin2ip(ip))

ip_range(sys.argv[1], sys.argv[2])

1P8LByPzuWGaCHyAFgZRSMLWAFt3HL5Awi

anonymous
()

from HEX to HEX over HEX

$ cat ipRRRAnge.sh 
#!/bin/bash

if [ $# -ne 2 ]; then
    echo "+---------------------------------------------------+"
    echo "|Не будь лошарой! Вводи два правильных аргумента!   |";
    echo "|example:   ./ipRRRAnge.sh 192.168.3.250 192.168.4.2|";
    echo "+---------------------------------------------------+"
    exit 1;
fi

nachalo=$((16#$(printf '%02X' ${1//./ })))
konchalo=$((16#$(printf '%02X' ${2//./ })))

if [ $nachalo -le $konchalo ]; then
	delta_i=+1;
else
	delta_i=-1;
fi
#echo $delta_i

i=$nachalo
until [ $i -eq $konchalo ];
do 
    #echo $i;
    hexaddr=$(printf '%08X' $i);
    #echo $hexaddr;
    printf "%d.%d.%d.%d\n" $(echo $hexaddr | sed 's/../0x& /g');
    #((i++));
    i=$(($i + $delta_i));
done;

hexaddr=$(printf '%08X' $konchalo);
printf "%d.%d.%d.%d\n" $(echo $hexaddr | sed 's/../0x& /g');

Результат:

$ ./ipRRRAnge.sh 192.168.3.250 192.168.4.2
192.168.3.250
192.168.3.251
192.168.3.252
192.168.3.253
192.168.3.254
192.168.3.255
192.168.4.0
192.168.4.1
192.168.4.2
Результат наоборот:
$ ./ipRRRAnge.sh 192.168.4.2 192.168.3.250
192.168.4.2
192.168.4.1
192.168.4.0
192.168.3.255
192.168.3.254
192.168.3.253
192.168.3.252
192.168.3.251
192.168.3.250
Результат для слабосчитающих (например роботов):
$ ./ipRRRAnge.sh 192.168.3.250 192.168.3.250
192.168.3.250
Результат для слабопонимающих, что же они хотят сделать:
$ ./ipRRRAnge.sh kokoko
+---------------------------------------------------+
|Не будь лошарой! Вводи два правильных аргумента!   |
|example:   ./ipRRRAnge.sh 192.168.3.250 192.168.4.2|
+---------------------------------------------------+

justAmoment ★★★★★
()
Ответ на: комментарий от sin-ok

ну что, тс тебе заплатил? кроме наших с тобой адресов я других не вижу.

прошу заметить, что $10 в биткоинах вчера (а лучше позавчера) и те же $10 в биткоинах сегодня это очень разные деньги.

anonymous
()
#!/bin/bash

ARG0=$0

tst_0_255() {
    case "$1" in
    "" | *[![:digit:]]* ) return 1;;
    esac
    [ "$1" -gt 255 ] && return 1
    return 0
}

declare -a k=(256*256*256 256*256 256 1)

tst_IP() {
        local i=0 v
        ipn=0
        for((i=0;i<4;i++)); do
                v="$1[$i]"
                tst_0_255 "${!v}" || break
                ipn=$((ipn+${!v}*k[i]))
        done
        v="$1[$i]"
        if [[ -n "${!v}" || $i -ne 4 ]]; then
                echo "$ARG0: '$2' invalid, need like as 1.2.3.4" 1>&2
                exit 1
        fi
}

if [ $# -ne 2 ]; then
        echo "usage $ARG0 IPstart IPend" 1>&2
        exit 2
fi

IFS=. read -ra ip1 <<< "$1"
tst_IP ip1 "$1"
ip1n=$ipn
IFS=. read -ra ip2 <<< "$2"
tst_IP ip2 "$2"

dots="..."
for((i=ip1n;i<=ipn;i++)); do
        ip1n=$i
        for((n=0;n<4;n++)); do
                nc=$((ip1n/k[n]))
                echo -n $nc${dots:$n:1}
                ip1n=$((ip1n-nc*k[n]))
        done
        echo
done
vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.