Google DNS 服务器

Google DNS Server

我想使用 Python 获取我的私人 IP 地址,所以我找到了一段代码可以做到这一点。

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 服务器的地址。现在,每当我们访问外部站点时,我们仅由我们的 public IP 地址表示,那么 Google DNS 如何找到我的私有 IP 地址?此外,即使我的互联网连接已关闭,它也能正常工作。

I wanted to get my private IP address using Python, so I found a snippet of code that does it. ... so how is Google DNS able to find my Private IP address ?

这段代码没有达到您的预期。它只报告从 UDP 套接字 "connecting" 到 8.8.8.8 的本地 IP 地址。此信息并非来自 Google,它来自您的本地操作系统,它当然知道其本地 IP 地址是什么。事实上,您可以连接到任何其他外部 IP 地址,您将获得相同的信息。

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

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