繁体   English   中英

如何通过 Python 获得“正确”的 IP 地址

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

对于一些玩弄的 TCP,我需要 2 个 IP 地址,公共地址和私有地址。 公开对外部服务的一些请求很容易,但如果我这样做

socket.gethostbyname(socket.gethostname())

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

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

此外,我应该在主机的 s.bind() 中放入什么? 该程序在互联网上运行,所以我应该把公共或私人 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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM