Если у нас есть эта строка ( IP-адрес ):192.168.1.1
Как я могу извлечь ( форму обратной записи DNS ) из этой строки, чтобы она отображалась как 1.1.168.192.in-addr.arpa
сценарий оболочки?
shell
text-processing
Сетевик
источник
источник
Ответы:
Вы можете сделать это с AWK . Есть более хорошие способы сделать это, но это самый простой, я думаю.
Это изменит порядок IP-адреса.
Чтобы сэкономить несколько нажатий клавиш, как предположил Микель, мы можем еще больше сократить верхний оператор:
ИЛИ
ИЛИ
AWK довольно гибкий. :)
источник
-F .
должно быть эквивалентноBEGIN{FS="."}
.Только для значения любопытства ... используя
tac
от GNU Coreutils: с учетом переменнойip
в форме ,192.168.1.1
тот.е.
источник
tac
!printf
редактирование (я изначально разместил некрасивоecho -n
)printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Если вы хотите использовать только оболочку (
zsh
,ksh93
,bash
), вот еще один способ:Или в простой старой оболочке:
источник
Легко с Perl, таким образом:
источник
perl -F'\.' -lane '$,=".";print reverse @F'
Чтобы округлить это, Руби:
Который также поддерживает IPv6
источник
ruby -r ipaddr -e 'puts ...'
Через GNU
sed
,Он переворачивает любой формат IPv4-адреса.
Пример:
источник
Используя стандартную библиотеку Python :
источник
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(все в одной строке)С
zsh
:Это флаги расширения переменной:
s:.:
: S PLIT на.
Oa
: Обратный о rder в виде rrayj:.:
: j oin on.
источник
Другая возможность - использовать инструмент командной строки dig с ключом -x.
На самом деле он выполняет запрос к записи PTR, но если вы фильтруете по «PTR», он покажет вам одну закомментированную строку (запрос) и, возможно, несколько ответов.
Использование «копать» может быть удобно для быстрого написания имени PTR, без необходимости писать небольшой скрипт. Особенно, если вам это нужно в интерактивном режиме (чтобы вырезать и вставить результат). Он работает и на IPv6.
источник
Если вы хотите, чтобы он работал и с IPv6 , вы можете использовать
dig -x
.Например:
источник
В питоне
источник
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
в Python2.7источник
Таким образом, вы можете ввести адрес и нажать клавишу возврата для вашего результата.
источник
С
host
командой отdnsutils
:источник
Предполагая вар содержит IP:
ip=192.168.2.1
. Если значение должно быть передано новой переменной, просто заключите любое решение внутри$()
и присвойте его переменнойrr=$(...)
.Возможны некоторые решения:
Простейшие
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Большинство оболочек
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Некоторые оболочки
: IFS=. read d c b a <<<"$ip"; printf %s "$a.$b.$c.$d.in-addr.arpa."
awk
: echo "$ip" | awk -F. '{OFS=FS;print $4,$3,$2,$1,"in-addr.arpa"}'
sed
: echo "$ip" | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$/\4.\3.\2.\1.in-addr.arpa./'
sed
: echo "arpa.in-addr.$ip" | sed 'y/./\n/' | sed 'G;$s/\n/./gp;h;d'
perl
: echo "$ip" | perl -F\\. -lane '$,=".";print( join(".",(reverse @F),"in-addr.arpa"))'
dig
: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
host
: host -t ptr 192.168.2.1 | cut -d' ' -f2
Решения dig и host работают с IPv6.
источник
источник
Более короткая альтернатива ответу Mattbianco с меньшим количеством инструментов, но с использованием pcregrep может быть:
источник
Используйте следующую однострочную оболочку:
источник