如何从IP地址获取主机名(Linux)?

86

我想通过 IP 地址获取远程机器/主机名。我找到了很多答案,比如 nslookup、host、resolveip 等等... 但我仍然无法从我的目标机器(cent OS, ubuntu等...)获取主机名。看来需要在 DNS 服务器上注册?

我有一台名为 test 的机器,使用的是 IP 10.1.27.97

但我使用上述方法仍然无法获取 "test"

是否有人能帮助我从 IP 地址中获取主机名?


如果在本地网络中可以找到名称,但在任何DNS中都找不到怎么办?我在我的resolv.conf中有一个search命令,我知道我的名称在其中。 - Sandburg
5个回答

109

要通过IP地址在本地网络中查找主机名,您可以使用来自Samba套件的nmblookup

nmblookup -A <ip>

要在互联网上查找主机名,您可以使用host程序:

host <ip>

或者您可以通过运行以下命令安装nbtscan

sudo apt-get install nbtscan

并使用:

nbtscan <ip>

*翻译自https://askubuntu.com/questions/205063/command-to-get-the-hostname-of-remote-server-using-ip-address/205067#205067

更新于2018年5月13日

你可以使用nslookup查询名称服务器,它可以双向工作!

nslookup <IP>
nslookup <hostname>

3
nbtscan -v -s : 192.168.0.1/24 - Aquarius Power
2
这个对于IPv6怎么样? - Strinder
8
最佳方式: nslookup <IP> - alfiogang
1
当我尝试运行 nslookup 10.10.2.220 时,我得到了 ** server can't find 220.2.10.10.in-addr.arpa: NXDOMAIN 的提示。这是一些有用的信息! - Yanick Rochon
“nmblookup -A <ip>” 对我返回了 “无法从<ip>获得回复”的信息,而其他变体则可以正常工作。 - mgutt

61
为了使用nslookuphostgethostbyname(),目标名称需要在运行程序的计算机上通过DNS注册或静态定义在主机文件中。是的,您可以使用SSH或其他应用程序直接连接到目标并查询它,但对于通用解决方案,您需要某种类型的DNS条目来实现它。

9

我发现在局域网中使用的另一种简单方法是

ssh [username@ip] uname -n

如果您需要登录命令行,将会是这样:
sshpass -p "[password]" ssh [username@ip] uname -n

0

不要使用host命令。在某些操作系统上,您会使用输入的任何内容来设置主机名,因此输入host 23.23.23.23将会将您的主机名设置为该IP地址。


这里说的是hostname命令而不是host命令。 - Vijayakumar

0

不需要知道连接的IP:

sh -c "IP=\$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'); nslookup \$IP | grep 'name =' | awk '{print \$NF}'"

这段代码是一个 shell 命令,它执行以下操作:

  • 使用 curl 命令从 checkip.dyndns.org 网站检索执行该命令的机器的公共 IP 地址。curl 的输出被导入到 sed 命令中,用于从响应中提取 IP 地址。
  • 然后将 IP 地址存储在 IP 变量中。
  • 使用 nslookup 命令对 IP 地址执行反向 DNS 查找。这将返回与 IP 地址相关联的域名。
  • nslookup 的输出被导入到 grep 命令中,用于提取包含字符串“name =”的行。
  • 最后,awk 命令用于提取行中的最后一个字段,即与 IP 地址相关联的域名。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接