Tail over file с заменой действительных IP-адресов на имена хостов - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь заменить все IP-адреса именами хостов в моем журнале dnsmasq в режиме реального времени при запуске tail -F.

Мне интересны строки запроса [A], например:

3 мая 20:32:35 dnsmasq [18422]: запрос [A] mobile.pipe.aria.microsoft.com от 192.168.1.145

И я бы хотел получить IP-адрес конечного устройства (192.168.1.145) для замены на полное доменное имя.

Сначала я пытался заставить его работать с правильной линией sed, но кажется, что соответствующая группа не прошла должным образом через \ Параметр 1 sed:

echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(dig @192.168.1.1 +short -x "\\1")#"

Результат:

dig: '\ 1.in-addr.arpa.' не является допустимым именем (недопустимое побег) что-то

Подобная ошибка возникает, когда я использую host cmd ( host: '\ 1' не имеет допустимого синтаксиса имени (неожиданный конец ввода) ). Я не уверен, почему это так, но когда я отображаю с помощью echo или printf, все хорошо:

echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(echo -n "\\1")#"

или

echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(printf "%s" \\1)#"

Результаты приведены ниже (так что подобранная группа, которая действительный IP-адрес передается через параметр sed):

что-то 192.168.1.145

Я пробовал некоторые приемы, такие как передача его через xargs, но все же не повезло:

echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(echo -n "\\1"|xargs -l dig @192.168.1.1 +short -x)#"

Имейте в виду, у меня нет GNU-версии sed, но есть ограниченная версия BusyBox (это AsusWRT-Merlin, поэтому, например, флаг sed e не поддерживается), поэтому мои возможности ограничены. Любые идеи ?

...