如何在本地网络中通过主机名查找IP地址?

5
我想通过本地网络中设备的“主机名”查找其“IP地址”。市场上有很多应用程序可以做到这一点。它们会同时提供“IP地址”和“主机名”,如“Fing”、“IP Tools”等等。但是,我仍然无法从“主机名”中找到“IP地址”。 我能够使用“dig”、“arp”和“ping”命令在“ubuntu OS 14.04”中找到“主机名”的“IP”,具体命令如下: “dig @224.0.0.251 -p 5353 example.local” 该命令会给我输出结果,如下所示:
 ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> @224.0.0.251 -p 5353 example.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56566
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.local.         IN  A

;; ANSWER SECTION:
example.local.      10  IN  A   192.168.0.142

;; Query time: 0 msec
;; SERVER: 192.168.0.142#5353(224.0.0.251)
;; WHEN: Mon May 30 17:01:06 IST 2016
;; MSG SIZE  rcvd: 47

在特定的ANSWER SECTION中,我可以得到hostname对应的ip地址。 当我使用以下命令时:

arp -vn example.local

它会给我以下输出:

Entries: 4  Skipped: 4  Found: 0
example.local (192.168.0.142) -- no entry

当我使用设备的 主机名 进行 ping 测试时,

ping example.local

它也会给出设备的 IP 地址

PING example.local (192.168.0.142) 56(84) bytes of data.
64 bytes from 192.168.0.142: icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 192.168.0.142: icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from 192.168.0.142: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from 192.168.0.142: icmp_seq=4 ttl=64 time=0.060 ms
64 bytes from 192.168.0.142: icmp_seq=5 ttl=64 time=0.069 ms

但是,当我在adb shell上执行以上命令时,大多数命令都找不到。 arpdig在Android中不存在。 并且当我通过其hostname通过adb shell ping设备时,它会给我以下错误:

ping:unknown host example.local

但是当我通过设备的ip进行ping时,它可以成功ping通:

$ ping 192.168.0.142                                         
PING 192.168.0.142 (192.168.0.142) 56(84) bytes of data.
64 bytes from 192.168.0.142: icmp_seq=1 ttl=64 time=263 ms
64 bytes from 192.168.0.142: icmp_seq=2 ttl=64 time=231 ms
64 bytes from 192.168.0.142: icmp_seq=3 ttl=64 time=1.82 ms
64 bytes from 192.168.0.142: icmp_seq=4 ttl=64 time=1.99 ms
64 bytes from 192.168.0.142: icmp_seq=5 ttl=64 time=122 ms
64 bytes from 192.168.0.142: icmp_seq=6 ttl=64 time=5.63 ms

上述操作都在同一网络中完成,但我仍然无法通过主机名(当我从adb shell使用相同命令时)获取IP。如何在android设备上使用adb shell通过主机名找到IP?请问我做错了什么?

1
在使用adb shell时,您在ping命令“example.local”中使用了错误的主机名。您的设备不知道该主机名。您需要告诉您的设备IP 192.168.0.142属于主机:example.local。这可以通过DNS服务器配置(相当复杂)或编辑设备上的hosts文件(需要root权限)来实现。 - Sangram Jadhav
我是一个安卓新手。我如何使用DNS服务器配置? - Mangesh Sambare
1
哦,这与Android无关。您需要配置网络的DNS服务器,该服务器将指定“example.local”具有IP地址192.168.0.142。但我不确定为什么您需要主机名的IP地址。如果您可以告诉我们用例,可能我们可以帮助寻找替代解决方案。 - Sangram Jadhav
如果您正在开发应用程序,可以使用Android Java API 查看 - Sangram Jadhav
@SangramJadhav:是的,这与Android无关,但我想尝试DNS配置。你能帮我吗?我该如何在example.local上配置DNS服务器?请分享任何可以帮助我的链接/过程。我的example.local系统是基于Linux的系统,具有运行DNS服务器的许多功能。请帮帮我? - Mangesh Sambare
你把目标主机和DNS服务器搞混了。你已经有一个DNS服务器,它在你的dig命令中使用的是224.0.0.251。你需要让你的设备知道它。我不知道设备上的网络配置是如何的,但在网络配置期间通知网络实体DNS服务器的标准方法是在DHCP中包含它的(IP)地址。 - Peter K
1个回答

0
我们可以按照以下方式运行ping命令: ping hostname -f 从括号中的输出中,我们可以看到机器的IP地址。

感谢您的回答,我从这个问题中解决了这个问题:https://stackoverflow.com/q/37652284/5015103 - Mangesh Sambare

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