AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 413312
Accepted
Martin Vegter
Martin Vegter
Asked: 2017-12-28 10:43:10 +0800 CST2017-12-28 10:43:10 +0800 CST 2017-12-28 10:43:10 +0800 CST

将十六进制 IP 地址转换为主机名

  • 772

我想在主机名和十六进制 IP 地址之间切换,反之亦然。我已经安装syslinux-utils了Debian Stretch,它提供gethostip:

gethostip -x google.com 
D83ACD2E

如何切换D83ACD2E回主机名?

在旧版本的 DebianWheezy中,我可以使用命令getaddrinfo' and 'getnameinfo

# getaddrinfo google.com
D83ACD4E
# getnameinfo D83ACD4E  
mil04s25-in-f14.1e100.net

我无法在Debian Stretch. 这些工具是否被其他工具取代?

ip tftp
  • 2 2 个回答
  • 2176 Views

2 个回答

  • Voted
  1. thrig
    2017-12-28T12:14:32+08:002017-12-28T12:14:32+08:00

    您可以 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
    $ 
    
    • 14
  2. Best Answer
    Stéphane Chazelas
    2018-09-11T11:36:55+08:002018-09-11T11:36:55+08:00

    您可以在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
    
    • 7

相关问题

  • Nginx - 创建链接到另一个(本地)网站的子域

  • 将外部 IP 放入变量中 - grep 操作失败 [重复]

  • IP地址可以以255结尾而不是广播IP地址吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve