【问题标题】:Google DNS Server谷歌 DNS 服务器
【发布时间】:2019-10-11 05:08:50
【问题描述】:

我想使用 Python 获取我的私有 IP 地址,所以我找到了一个 sn-p 的代码。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
s.close()

这里的 8.8.8.8 是 Google DNS 服务器的地址。现在,每当我们访问外部站点时,我们只能由我们的公共 IP 地址代表,那么 Google DNS 是如何找到我的私有 IP 地址的呢?此外,即使我的互联网连接关闭,这也能正常工作。

【问题讨论】:

    标签: python sockets dns ip


    【解决方案1】:

    我想使用 Python 获取我的私有 IP 地址,所以我找到了一个可以做到这一点的 sn-p 代码。 ... 那么 Google DNS 是如何找到我的私有 IP 地址的呢?

    这段代码的 sn-p 并没有按照您的预期进行。它报告的只是来自“连接”到 8.8.8.8 的 UDP 套接字的本地 IP 地址。此信息并非来自 Google,而是来自您的本地操作系统,当然该操作系统知道其本地 IP 地址是什么。事实上,您可以连接到任何其他外部 IP 地址,并且您会得到相同的信息。

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    

    除此之外,代码也是错误的。它没有连接到 DNS 服务器 - DNS 服务器将是端口 53,而不是您在此处使用的端口 80。

    【讨论】:

    • 谢谢!我知道 DNS 在端口 53 上工作,但代码在任何端口上都可以正常工作。
    • @NimishAgrawal:与您连接的外部目的地完全无关,这不仅包括 IP,还包括端口。就像我说的,本地 IP 地址不是从对等端而是从本地系统获取的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多