【发布时间】:2020-06-02 11:23:54
【问题描述】:
我有一个新的学习,我正在尝试使用 python 的套接字获取主机名。
所以我从我的 macbook 运行了以下代码:
socket.gethostbyaddr("192.168.1.111")
我得到了('rock64', [], ['192.168.1.111']),然后我尝试了一台不在网络上但曾经是的计算机的 IP 地址:
socket.gethostbyaddr("192.168.1.189")
它返回:('mint', [], ['192.168.1.189']) 然后我意识到它来自/etc/hosts 文件。
现在在那个主机文件中我也有这个条目:
/etc/hosts
172.217.25.3 google.com.hk
但是如果我尝试从 wan 地址的 ip 获取主机,我会得到与预期不同的结果!
socket.gethostbyaddr("172.217.25.3")
返回('hkg07s24-in-f3.1e100.net', ['3.25.217.172.in-addr.arpa'], ['172.217.25.3'])
所以我不知道在 WAN ip 地址的后一种情况下我在哪里获取主机名,为什么在本地计算机 IP 的情况下我从配置的 /etc/hosts 文件中获取主机名?
我们如何在不查看 /etc/hosts 文件或其他方式的情况下获得本地网络上主机的主机名socket.gethostbyaddr?
【问题讨论】:
-
您希望获得什么主机名以及用于什么目的?在打击垃圾邮件发送者时,反向 DNS 查找通常很有用,即在服务器所有者有动机向 RIPE 注册正确域名的情况下。大多数 IP 地址都没有解析回任何有意义的东西,所以我想知道这样做的原因是什么。
-
我最感兴趣的是获取本地网络上的主机名!但我只获得我在 /etc/hosts 文件中设置的主机名
-
在 OSI 模型的第 2 层和第 3 层没有“主机名”这样的术语。 DNS、MDNS、NETBIOS 是第 5,7 层应用协议。您可以使用它们来获取泄露的名称,但它可能不可靠,因为您网络上的主机可能不会运行任何可用于服务发现的服务。所以我的问题是:您需要什么样的主机名以及用于什么目的?
-
我们做
echo $HOSTNAME时得到的那个或者路由器在dhcp设置下说的主机id -
$HOSTNAME 是内部私有的东西,它与外界无关,除非主机想通过 avahi-daemon 或类似的东西与邻居共享此类信息。在某些特定情况下,路由器会通过 dhcp 请求获取泄露的主机名。您可以监控您的网络是否存在此类泄漏(netbios、mdns、dhcp 等),但此类信息与通信目的无关。您可以嗅探此类泄漏以构建 MAC=>name 关联映射以协助某些登录 IDS 系统。您能否告诉我们agian您获取本地网络主机的“主机名”的目的是什么?
标签: python-3.x sockets networking hostname