Ip
將十六進制 IP 地址轉換為主機名
我想在主機名和十六進制 IP 地址之間切換,反之亦然。我已經安裝
syslinux-utils
了Debian Stretch
,它提供gethostip
:gethostip -x google.com D83ACD2E
如何切換
D83ACD2E
回主機名?在舊版本的 Debian
Wheezy
中,我可以使用命令getaddrinfo' and 'getnameinfo
# getaddrinfo google.com D83ACD4E # getnameinfo D83ACD4E mil04s25-in-f14.1e100.net
我無法在
Debian Stretch
. 這些工具是否被其他工具取代?
您可以在
getent
這裡使用 glibc:$ 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
您可以 hexify
D83ACD2E
,將其打包成(網路字節順序!)32 位整數,然後列印由點連接的整數的(無符號!)字元組件。(如果在彙編中更冗長,這也是可能的。)$ perl -e 'printf "%v*d\n", ".", pack "N", hex shift' D83ACD2E 216.58.205.46 $
使用較少的複雜性,十進制標誌
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
的十六進制前綴$ socket_getnameinfo 0xD83ACD4E Resolved address '0xD83ACD4E' mil04s25-in-f78.1e100.net $
(根據手冊頁 Debian 確實重命名了該程序,我現在記得 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 $