Назад | Перейти на главную страницу

маскировать общедоступные IP-адреса из любого вывода команды (для диагностики)

Я пишу сценарий для извлечения информации из 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