Wenn wir diesen String haben ( IP-Adresse ):192.168.1.1
Wie kann ich das ( DNS-Reverse-Record-Formular ) aus dieser Zeichenfolge ableiten , damit es wie 1.1.168.192.in-addr.arpa
mit einem Shell-Skript angezeigt wird ?
shell
text-processing
Networker
quelle
quelle
Antworten:
Sie können es mit AWK tun . Es gibt schönere Möglichkeiten, dies zu tun, aber ich denke, dies ist die einfachste.
Dadurch wird die Reihenfolge der IP-Adresse umgekehrt.
Um ein paar Tastenanschläge zu sparen, wie Mikel vorgeschlagen hat, können wir die obere Aussage weiter verkürzen:
ODER
ODER
AWK ist ziemlich flexibel. :)
quelle
-F .
sollte dies gleichbedeutend sein mitBEGIN{FS="."}
.Gerade für Neugier Wert ... mit
tac
von coreutils GNU: Da eine Variableip
in der Form192.168.1.1
danndh
quelle
tac
!printf
Schnitt (ich habe ursprünglich einen hässlichen gepostetecho -n
)printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Wenn Sie nur verwenden möchten Shell (
zsh
,ksh93
,bash
), hier ist eine andere Art und Weise:Oder in einfacher alter Schale:
quelle
Einfach mit Perl, also:
quelle
perl -F'\.' -lane '$,=".";print reverse @F'
Um es abzurunden, Ruby:
Welches auch IPv6 unterstützt
quelle
ruby -r ipaddr -e 'puts ...'
Durch GNU
sed
,Es kehrt jedes IPv4-Adressformat um.
Beispiel:
quelle
Verwenden der Standardbibliothek von Python :
quelle
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(alle in einer Zeile)Mit
zsh
:Das sind variable Erweiterungsflags:
s:.:
: s plit auf.
Oa
: Reverse o rder der ein rrayj:.:
: J oin auf.
quelle
Eine andere Möglichkeit ist die Verwendung des Befehlszeilentools "dig" mit der Option "-x".
Es führt tatsächlich eine Anfrage für den PTR-Eintrag durch, aber wenn Sie nach "PTR" filtern, werden eine kommentierte Zeile (die Anfrage) und möglicherweise einige Antworten angezeigt.
Die Verwendung von "dig" kann nützlich sein, um den PTR-Namen schnell zu schreiben, ohne ein kleines Skript schreiben zu müssen. Besonders, wenn Sie es interaktiv benötigen (um das Ergebnis auszuschneiden und einzufügen). Es funktioniert auch auf IPv6.
quelle
Wenn Sie möchten, dass es auch mit IPv6 funktioniert , können Sie verwenden
dig -x
.Beispielsweise:
quelle
In Python
quelle
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
in Python 2.7quelle
Auf diese Weise können Sie eine Adresse eingeben und die Eingabetaste für Ihr Ergebnis drücken.
quelle
Mit
host
Befehl vondnsutils
:quelle
Angenommen, eine Variable enthält die IP:
ip=192.168.2.1
. Wenn der Wert einer neuen Variablen$()
zugewiesen werden muss, schließen Sie einfach eine beliebige Lösung ein und weisen Sie diese der Variablen zurr=$(...)
.Einige Lösungen sind möglich:
Einfachstes Die
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
meisten Schalen
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Einige Schalen
: 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
Sowohl dig- als auch host-Lösungen funktionieren mit IPv6.
quelle
quelle
Eine kürzere Alternative zu mattbiancos Antwort mit weniger Werkzeugen, aber mit pcregrep, könnte sein:
quelle
Verwenden Sie folgende einzeilige Shell:
quelle