Я пишу сценарий для извлечения информации из BusyBox v1.25.1 / Linux 2.6.36 / router, где пользователь может просто запустить сценарий и скопировать / вставить вывод в форму отправки, чтобы запросить поддержку. Сценарий, по сути, представляет собой список команд вроде route
, ifconfig
и т. д. Из-за импликации busybox я ограничен / bin / sh.
Я пытаюсь найти умный способ автоматически маскировать все общедоступные IP-адреса только из вывода. Заменить полный IP-адрес было бы уже хорошо, но если это возможно, я бы искал команду для конвейерной передачи в конце каждой команды (даже внутренней функции), чтобы просто заменить, скажем, первые два октета, например. 80.80.80.80
с участием XX.XX.80.80
Приятно иметь возможность заменить такое же количество цифр, чтобы сохранить форматирование, где это возможно. например
8.8.8.8=X.X.X.X
80.80.8.8=XX.XX.X.X
180.180.80.8=XXX.XXX.XX.X
практический пример:
root@router:/proc# route | filtering-goes-here
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
XX.XX.168.1 * 255.255.255.255 UH 0 0 0 vlan2
172.16.9.0 * 255.255.255.0 U 0 0 0 br1
10.10.9.0 * 255.255.255.0 U 0 0 0 br0
10.114.126.0 * 255.255.254.0 U 0 0 0 tun11
XX.XX.168.0 * 255.255.252.0 U 0 0 0 vlan2
10.10.0.0 * 255.255.0.0 U 0 0 0 tinc
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default cpc86269 0.0.0.0 UG 0 0 0 vlan2
Спасибо!!
Есть ли sed
скрипт вроде этого работает для вас?
$ cat filter.sed
s|\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\)|___\1___\2___\3___\4|g
s|___[0-9]|___X|g
s|___X[0-9]|___XX|g
s|___XX[0-9]|___XXX|g
s|___||g
Вот пример запуска,
$ echo "111.22.3.44" | sed -f filter.sed
XXX.XX.X.XX
Это преобразует все IP-адреса в форме a.b.c.d
в эквивалентную ширину x.x.x.x
шаблон. Если вам нужно пропустить некоторые IP-адреса, для этого потребуются правила исключения в скрипте.
Если ___
шаблон является частью вашего возможного вывода в контексте, используемом здесь, вам нужно будет перейти на другой «контекст», который невозможен во входных данных сценария.
Обновление: для маскировки публичного IP
Попробуй это sed
замена скрипта на приведенный выше базовый.
s|\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)|__#\1.\2.\3.\4|g
s|#0\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|0\1|g
s|#10\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|10\1|g
s|#127\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|127\1|g
s|#255\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|255\1|g
s|#\(22[4-9]\)\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|\1\2|g
s|#\(23[0-8]\)\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|\1\2|g
s|#169\.254\(\.[0-9]\+\.[0-9]\+\)|169.254\1|g
s|#192\.168\(\.[0-9]\+\.[0-9]\+\)|192.168\1|g
s|#\(172\.1[6789]\)\(\.[0-9]\+\.[0-9]\+\)|\1\2|g
s|#\(172\.2[0-9]\)\(\.[0-9]\+\.[0-9]\+\)|\1\2|g
s|#\(172\.3[01]\)\(\.[0-9]\+\.[0-9]\+\)|\1\2|g
s|__#\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\)|___\1___\2___\3___\4|g
s|___[0-9]|___X|g
s|___X[0-9]|___XX|g
s|___XX[0-9]|___XXX|g
s|___||g
s|__||g
Примечание. Это также x
-из сетевых масок за одним исключением. Я не добавил 240.0.0.0
к списку.
Update2: если вы хотите просто замаскировать первый IP-адрес в каждой строке
Это для route
выходной случай, когда первый столбец - IP-адреса.
Заменить первую строку в обновленном sed
сценарий с,
s|^\(\s*\)\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)|\1__#\2.\3.\4.\5|g
По предложению OPs, оставив здесь также скрипт mask-for-private-IPs
# Modified version that limits to first IP on each line prefixed with whitespace.
s|^\(\s*\)\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)|\1___#\2.\3.\4.\5|g
# Basic version that operates on all IP strings in the input.
#s|\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)|___#\1.\2.\3.\4|g
#
s|\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)|___#\1.\2.\3.\4|g
s|___#0\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___0\1|g
s|___#10\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___10\1|g
s|___#127\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___127\1|g
s|___#255\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___255\1|g
s|___#224\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___224\1|g
s|___#\(22[4-9]\)\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___\1\2|g
s|___#\(23[0-8]\)\(\.[0-9]\+\.[0-9]\+\.[0-9]\+\)|___\1\2|g
s|___#169\.254\(\.[0-9]\+\.[0-9]\+\)|___169.254\1|g
s|___#192\.168\(\.[0-9]\+\.[0-9]\+\)|___192.168\1|g
s|___#\(172\.1[6789]\)\(\.[0-9]\+\.[0-9]\+\)|___\1\2|g
s|___#\(172\.2[0-9]\)\(\.[0-9]\+\.[0-9]\+\)|___\1\2|g
s|___#\(172\.3[01]\)\(\.[0-9]\+\.[0-9]\+\)|___\1\2|g
s|___\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\.\)\([0-9]\+\)|___\1___\2___\3___\4|g
s|___[0-9]|___X|g
s|___X[0-9]|___XX|g
s|___XX[0-9]|___XXX|g
s|___#||g
s|___||g