Bash shell, чтобы сделать RANGE из списка IP-адресов - PullRequest
0 голосов
/ 26 марта 2019

Мне нужен код bash для генерации диапазона заданных IP-адресов. Например, если у меня есть следующий простой список:

1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.5
1.1.2.1
1.2.3.4
100.100.1.2
100.100.1.3

Мой вывод будет:

(1.1.1.1-1.1.1.3) 
1.1.1.5 
1.1.2.1 
1.2.3.4 
(100.100.1.2-100.100.1.3) 

... и т. Д.

ТОЛЬКО ближайший IPS будет включен в RANGE.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Хотя это, безусловно, можно написать в bash, охватить все угловые случаи довольно сложно.Можете ли вы установить специальный инструмент для этой задачи, например, iprange?

iprange -j Выход очень близок к тому, что вам нужно, и вы можете исключить одиночные диапазоны, как это:

iprange -j | sed 's/^\(.*\)-\1$/\1/'
0 голосов
/ 26 марта 2019

Это решение внутри GNUmake, использующее gmtt , библиотеку для программирования общего назначения в GNUmake.

include gmtt-master/gmtt-master/gmtt.mk

ip-inc = $(strip $(call -ip-inc,$(word 1,$(subst ., ,$1)),$(word 2,$(subst ., ,$1)),$(word 3,$(subst ., ,$1)),$(word 4,$(subst ., ,$1))))
-ip-inc = $(if $(findstring :$4:,:255:),$(if $(findstring :$3:,:255:),$(if $(findstring :$2:,:255:),$(if $(findstring :$1:,:255:),0.0.0.0,$(call decimal-inc,$1).0.0.1),$1.$(call decimal-inc,$2).0.1),$1.$2.$(call decimal-inc,$3).1),$1.$2.$3.$(call decimal-inc,$4))

until-neq = $(if $(call str-eq,$(word 2,$1),$(call ip-inc,$2)),$(call until-neq,$(wordlist 2,2147483647,$1),$(call ip-inc,$2)),$2$(rparen) $(call gen-ip-range,$(wordlist 2,2147483647,$1)))

gen-ip-range = $(if $1,$(if $(call str-eq,$(call ip-inc,$(firstword $1)),$(word 2,$1)),$(lparen)$(firstword $1)-$(call until-neq,$1,$(firstword $1)),$(firstword $1) $(call gen-ip-range,$(wordlist 2,2147483647,$1))))


IP_LIST =   1.1.1.1 1.1.1.2 1.1.1.3 1.1.1.5 1.1.1.255 1.1.2.1 1.2.3.4   1.255.255.255 100.100.1.2 100.100.1.3 

IP_RANGES := $(call gen-ip-range,$(IP_LIST))
$(info $(IP_RANGES))

По сути, это функциональная программа, которая преобразует отсортированный список IPадреса к вашему формату диапазона.Смешные IP-адреса с начальными 0 или несортированными списками в этом простом примере не обрабатываются (но могут быть с встроенными функциями gmtt).

...