如何通过 Python 获取 'correct' IP 地址

How can I get the 'correct' IP-Address via Python

对于一些 TCP 游戏,我需要 2 个 IP 地址,public 和私有地址。 Public 对外部服务的一些请求很容易,但如果我这样做

socket.gethostbyname(socket.gethostname())

我得到 127.0.0.1/8,这是不正确的。如果我输入 ip a 我得到 2 个数据块,第一个是 127...,标记为 lo: ,但我需要第二个,即 192.168 ...这是 ens3: .

我不太了解网络及其相关的东西,所以如果有一个简单明了的解决方案,我很抱歉,但是有没有办法让每台机器都可以 运行 我的代码我得到我的代码所需的 IP 地址 运行?

此外,我应该在主机的 s.bind() 中输入什么?互联网上的程序 运行s 所以我应该把 public 或私人 IP 地址放在那里吗?一些教程在那里放了一个空字符串,这让我现在很困惑,而且大多数都使用本地网络,所以我不知道在互联网上做时该怎么做。

您可以创建连接并获取与活动连接关联的地址。

import socket


def get_internal_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('8.8.8.8', 80))
    ip = s.getsockname()[0]
    s.close()
    return ip


def get_external_ip():
    return socket.gethostbyname(socket.gethostname())


print('Internal:', get_internal_ip())
print('External:', get_external_ip())