Jeśli mamy ten ciąg ( adres IP ):192.168.1.1
W jaki sposób mogę uzyskać ( odwrotną formę zapisu DNS ) z tego ciągu, aby był wyświetlany jak 1.1.168.192.in-addr.arpa
przy użyciu skryptu powłoki?
shell
text-processing
Networker
źródło
źródło
Odpowiedzi:
Możesz to zrobić za pomocą AWK . Są ładniejsze sposoby na zrobienie tego, ale myślę, że jest to najprostszy.
Spowoduje to odwrócenie kolejności adresu IP.
Aby zaoszczędzić kilka naciśnięć klawiszy, jak sugerował Mikel, możemy dodatkowo skrócić górne zdanie:
LUB
LUB
AWK jest dość elastyczny. :)
źródło
-F .
powinno to być równoważne zBEGIN{FS="."}
.Tylko dla wartości ciekawość ... korzystania
tac
z coreutils GNU: dana zmiennaip
w postaci192.168.1.1
następnieto znaczy
źródło
tac
!printf
edycję (pierwotnie zamieściłem brzydkąecho -n
)printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Jeśli chcesz użyć tylko shell (
zsh
,ksh93
,bash
), oto inny sposób:Lub w zwykłej starej powłoce:
źródło
Łatwo z Perlem, a zatem:
źródło
perl -F'\.' -lane '$,=".";print reverse @F'
Podsumowując, Ruby:
Który obsługuje również IPv6
źródło
ruby -r ipaddr -e 'puts ...'
Przez GNU
sed
,Odwraca dowolny format adresu IPv4.
Przykład:
źródło
Używając standardowej biblioteki Pythona :
źródło
python3.5 -c "import ipaddress; ipaddress.ip_address('192.168.1.1').reverse_pointer"
(wszystko w jednym wierszu)Z
zsh
:Są to zmienne flagi ekspansji:
s:.:
: s plit on.
Oa
: Wstecz o rDer z a rrayj:.:
: J OIN na.
źródło
Inną możliwością jest użycie narzędzia wiersza polecenia „dig” z przełącznikiem „-x”.
W rzeczywistości wysyła żądanie do wpisu PTR, ale jeśli odfiltrujesz „PTR”, wyświetli jeden komentarz (żądanie) i być może niektóre odpowiedzi.
Użycie „dig” może być przydatne do szybkiego napisania nazwy PTR, bez konieczności pisania małego skryptu. Zwłaszcza jeśli potrzebujesz go interaktywnie (aby wyciąć i wkleić wynik). Działa również na IPv6.
źródło
Jeśli chcesz, aby działał również z IPv6 , możesz użyć
dig -x
.Na przykład:
źródło
W Pythonie
źródło
"{}.in-addr.arpa".format(".".join(reversed(a.split("."))))
w Python2.7źródło
W ten sposób możesz wpisać adres i nacisnąć Return dla swojego wyniku.
źródło
Z
host
komendą oddnsutils
:źródło
Zakładając var zawiera ip:
ip=192.168.2.1
. Jeśli wartość należy podać nowej zmiennej, po prostu dołącz do niej dowolne rozwiązanie$()
i przypisz je do zmiennejrr=$(...)
.Możliwe są niektóre rozwiązania:
Najprostszy
: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Większość powłok
: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Niektóre powłoki
: 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
Zarówno rozwiązania typu dig, jak i host działają z IPv6.
źródło
źródło
Krótsza alternatywa dla odpowiedzi mattbianco z mniejszą ilością narzędzi, ale użycie pcregrep może być:
źródło
Użyj następującej powłoki powłoki:
źródło