호스트 이름과 16진수 IP 주소 간을 전환하고 싶습니다. 나는 그것을 설치했고 syslinux-utils
그것은 Debian Stretch
다음을 제공합니다 gethostip
:
gethostip -x google.com
D83ACD2E
D83ACD2E
호스트 이름으로 다시 전환하려면 어떻게 해야 하나요 ?
이전 버전의 데비안에서는 Wheezy
다음 명령을 사용할 수 있었습니다.getaddrinfo' and 'getnameinfo
# getaddrinfo google.com
D83ACD4E
# getnameinfo D83ACD4E
mil04s25-in-f14.1e100.net
에서는 이러한 도구를 찾을 수 없습니다 Debian Stretch
. 이러한 도구가 다른 도구로 대체되었습니까?
답변1
D83ACD2E
16진수로 변환하여 (네트워크 바이트 순서!) 32비트 정수로 압축한 다음 해당 정수의 (부호 없는!) 문자 구성 요소를 점으로 연결하여 인쇄할 수 있습니다 . (자세한 내용이 있으면 가능합니다.조립.)
$ perl -e 'printf "%v*d\n", ".", pack "N", hex shift' D83ACD2E
216.58.205.46
$
복잡성이 덜한 10진수 플래그는 gethostip
값을 직접 제공 하거나 host
또는nslookup
getent hosts
$ gethostip -d google.com
172.217.3.206
$ host `gethostip -d google.com`
206.3.217.172.in-addr.arpa domain name pointer sea15s12-in-f206.1e100.net.
206.3.217.172.in-addr.arpa domain name pointer sea15s12-in-f14.1e100.net.
$ getent hosts `gethostip -d google.com`
172.217.3.206 sea15s12-in-f206.1e100.net
$
이는 특정 IP 주소와 연결된 DNS PTR 레코드로, 설정될 수도 있고 설정되지 않을 수도 있고 찾고 있는 호스트 이름일 수도 있고 아닐 수도 있습니다.
아니면 여기저기 검색해보면apt-file
$ sudo apt-file search getaddrinfo | grep 'getaddrinfo$'
gnulib: /usr/share/gnulib/modules/getaddrinfo
libruli-bin: /usr/bin/ruli-getaddrinfo
libsocket-getaddrinfo-perl: /usr/bin/socket_getaddrinfo
$ sudo apt-file search getnameinfo | grep 'getnameinfo$'
libsocket-getaddrinfo-perl: /usr/bin/socket_getnameinfo
$ sudo apt-get install libsocket-getaddrinfo-perl
...
하지만 해당 버전은 귀하의 기호를 지원하지 않는 것 같습니다.
$ socket_getnameinfo D83ACD4E
Unrecognised address or port format - Name or service not known
$
0x
그러나 일반 16진수 접두사를 사용하는 경우
$ socket_getnameinfo 0xD83ACD4E
Resolved address '0xD83ACD4E'
mil04s25-in-f78.1e100.net
$
(맨 페이지에 따르면 데비안은 프로그램 이름을 바꾸었는데, 지금은 LeoNerd가 얼마 전 IRC에서 언급한 것을 기억합니다...)
이를 받아들이겠다고 고집한다면 D83ACD4E
위의 방법을 사용하여 hex
값을 디지털화하고 패킹한 후 Socket
모듈 기능을 통해 맹목적으로 처리할 수 있습니다. 하지만 실제로는 오류 검사, 입력 유효성 검사, 테스트 등을 갖춘 스크립트여야 합니다.등
$ perl -MSocket=:addrinfo,pack_sockaddr_in \
-E '($e,$h)=getnameinfo pack_sockaddr_in(0, pack("N", hex shift));' \
-E 'say $h' D83ACD2E
mil04s24-in-f46.1e100.net
$
답변2
여기서 glibc를 사용할 수 있습니다 getent
:
$ getent ahostsv4 0xD83ACD2E | { read ip rest && getent hosts "$ip"; }
216.58.205.46 mil04s24-in-f46.1e100.net
또 다른 perl
방법:
$ perl -MSocket -le '($n)=gethostbyaddr(inet_aton("0xD83ACD2E"), AF_INET); print $n'
mil04s24-in-f46.1e100.net