Si tenemos esta cadena ( dirección IP ):192.168.1.1
¿Cómo puedo derivar el ( formulario de registro inverso DNS ) de esta cadena, para que se muestre como si se 1.1.168.192.in-addr.arpa
usara un script de shell?
shell
text-processing
Networker
fuente
fuente
Respuestas:
Puedes hacerlo con AWK . Hay mejores formas de hacerlo, pero creo que esta es la más simple.
Esto invertirá el orden de la dirección IP.
Solo para ahorrar algunas pulsaciones de teclas, como sugirió Mikel, podemos acortar aún más la declaración superior:
O
O
AWK es bastante flexible. :)
fuente
-F .
debe ser equivalente aBEGIN{FS="."}
.Solo por valor de curiosidad ... usando
tac
GNU coreutils: dada una variableip
en el formulario192.168.1.1
entonceses decir
fuente
tac
!printf
edición (originalmenteecho -n
printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Si desea utilizar sólo la cáscara (
zsh
,ksh93
,bash
), aquí hay otra manera:O en la vieja cáscara simple:
fuente
Fácilmente con Perl, por lo tanto:
fuente
perl -F'\.' -lane '$,=".";print reverse @F'
Para redondear, Ruby:
Que también es compatible con IPv6
fuente
ruby -r ipaddr -e 'puts ...'
A través de GNU
sed
,Invierte cualquier formato de dirección IPv4.
Ejemplo:
fuente
Usando la biblioteca estándar de Python :
fuente
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(todo en una línea)Con
zsh
:Esas son banderas de expansión variable:
s:.:
: s plit on.
Oa
: Inversa o rder la una RRayj:.:
: j on.
fuente
Otra posibilidad es usar la herramienta de línea de comando "cavar" con el interruptor "-x".
En realidad, hace una solicitud en la entrada PTR, pero si filtra en "PTR", le mostrará una línea comentada (la solicitud) y tal vez algunas respuestas.
Usar "cavar" puede ser útil para una escritura rápida del nombre PTR, sin tener que escribir un pequeño guión. Particularmente si lo necesita de forma interactiva (para cortar y pegar el resultado). Funciona también en IPv6.
fuente
Si quieres que funcione con IPv6 , puede usarlo
dig -x
.Por ejemplo:
fuente
En python
fuente
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
en Python2.7fuente
De esta manera, puede escribir una dirección y presionar regresar para obtener su resultado.
fuente
Con
host
comando dednsutils
:fuente
Suponiendo una var contiene la ip:
ip=192.168.2.1
. Si el valor necesita ser dado a una nueva variable, simplemente encierre cualquier solución dentro$()
y asígnela a la variablerr=$(...)
.Algunas soluciones son posibles:
Más simples
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
La mayoría de los proyectiles
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Algunas conchas
: 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"))'
excavación
: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
de acogida
: host -t ptr 192.168.2.1 | cut -d' ' -f2
Las soluciones de excavación y host funcionan con IPv6.
fuente
fuente
Una alternativa más corta a la respuesta de mattbianco con menos herramientas, pero el uso de pcregrep podría ser:
fuente
Use el siguiente shell de una línea:
fuente