Se tivermos esta sequência ( endereço IP ):192.168.1.1
Como posso derivar o ( formulário de registro reverso do DNS ) dessa string, para que seja mostrado como 1.1.168.192.in-addr.arpa
usar um script de shell?
shell
text-processing
Networker
fonte
fonte
Respostas:
Você pode fazer isso com o AWK . Existem maneiras mais agradáveis de fazer isso, mas acho que é a mais simples.
Isso reverterá a ordem do endereço IP.
Apenas para salvar algumas teclas, como Mikel sugeriu, podemos reduzir ainda mais a declaração superior:
OU
OU
O AWK é bastante flexível. :)
fonte
-F .
deve ser equivalente aBEGIN{FS="."}
.Apenas pelo valor da curiosidade ... usando
tac
do GNU coreutils: dada uma variávelip
na forma192.168.1.1
entãoie
fonte
tac
!printf
edição (I originalmente um feioecho -n
)printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Se você quiser usar apenas Shell (
zsh
,ksh93
,bash
), aqui está uma outra maneira:Ou em concha velha lisa:
fonte
Facilmente com Perl, assim:
fonte
perl -F'\.' -lane '$,=".";print reverse @F'
Para finalizar, Ruby:
Que também suporta IPv6
fonte
ruby -r ipaddr -e 'puts ...'
Através do GNU
sed
,Inverte qualquer formato de endereço IPv4.
Exemplo:
fonte
Usando a biblioteca padrão do Python :
fonte
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(todos em uma linha)Com
zsh
:Esses são sinalizadores de expansão variável:
s:.:
: s plit on.
Oa
: Inversa o rder a um rrayj:.:
: j oin on.
fonte
Outra possibilidade é usar a ferramenta de linha de comando "dig" com a opção "-x".
Na verdade, ele faz uma solicitação na entrada PTR, mas se você filtrar em "PTR", será exibida uma linha comentada (a solicitação) e talvez algumas respostas.
O uso de "dig" pode ser útil para escrever rapidamente o nome do PTR, sem a necessidade de escrever um pequeno script. Especialmente se você precisar interativamente (para cortar e colar o resultado). Também funciona no IPv6.
fonte
Se você quiser que ele funcione com IPv6 também, você pode usá-lo
dig -x
.Por exemplo:
fonte
Em Python
fonte
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
fonte
Dessa forma, você pode digitar um endereço e clicar em retornar para o seu resultado.
fonte
Com o
host
comando dednsutils
:fonte
Assumindo uma var contém o ip:
ip=192.168.2.1
. Se o valor precisar ser atribuído a uma nova variável, apenas inclua qualquer solução interna$()
e atribua-a à varrr=$(...)
.Algumas soluções são possíveis:
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Mais simples A maioria das conchas
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Algumas conchas
: IFS=. read d c b a <<<"$ip"; printf %s "$a.$b.$c.$d.in-addr.arpa."
despertam
: 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
As soluções Dig e Host funcionam com IPv6.
fonte
fonte
Uma alternativa mais curta à resposta de mattbianco com menos ferramentas, mas o uso de pcregrep pode ser:
fonte
Use o seguinte shell de uma linha:
fonte