Python 呼叫计算机IP地址

Python 呼叫计算机IP地址,python,sockets,ip-address,ipv4,Python,Sockets,Ip Address,Ipv4,我正试图找到一种方法,让Python确定我的计算机IP地址是什么,并且可以用一只手来处理一个奇怪的结果。有几个简单的事实,我正在将Windows10与Linux子系统(Ubuntu终端应用程序)一起使用,并且正在运行python 3.7.6 我最初的尝试是使用套接字。i、 e import socket hostname = socket.gethostname() # outputs a string with the hostname ip_address = socket.gethost

我正试图找到一种方法,让Python确定我的计算机IP地址是什么,并且可以用一只手来处理一个奇怪的结果。有几个简单的事实,我正在将Windows10与Linux子系统(Ubuntu终端应用程序)一起使用,并且正在运行python 3.7.6

我最初的尝试是使用套接字。i、 e

import socket
hostname = socket.gethostname() # outputs a string with the hostname 
ip_address = socket.gethostbyname(hostname) # outputs a string with the relevant IP address
所以,我认为这很有效,直到我尝试在另一台计算机上运行它,发现我的计算机和另一台计算机的IP地址是相同的。在Windows命令提示符下的快速查看显示,我的IPv4地址与套接字调用的地址完全不同

我不确定这里有什么问题,如果有人知道,我洗耳恭听

我的主要问题是:

如何使用Python调用计算机的唯一IPv4地址

编辑: 要解决评论中的问题:

我最终要做的是访问位于两台不同计算机上不同目录中的文件。我正在为正在进行的数据分析项目编写脚本,并使用gitlab跟踪我的进度。但是,需要将文件路径硬编码到脚本中。为了避免每次切换计算机时更改路径,我想添加几行代码来执行以下操作:

import socket
hostname = socket.gethostname() # outputs a string with the hostname 
ip_address = socket.gethostbyname(hostname) # outputs a string with the relevant IP address

if ip_address == '127.0.1.1':
    print('Working on desktop1:')
    masked_data = 'file/path/of/desktop/1/mask.pkl'
elif ip_address == 'xxx.yyy.zzz.1':
    print('Working on desktop2:')
    masked_data = 'file/path/of/desktop/2/mask.pkl'
在我们启动并运行服务器之前,这是暂时的,我知道这是一个奇怪的解决方法;P

当使用套接字时,
ip\u地址
对于这两台计算机的问题是相同的。我需要做的是获取我正在使用的计算机的唯一地址,并替换循环中的IP地址

你用错工具了。 使用
socket.gethostname()
获取您自己的主机名,然后使用
socket.gethostbyname()
将其解析为IP,可以告诉您操作系统建议用于环回通信的IP地址。但是,这并不能告诉您网络上其他地方的系统可能使用什么地址与您通信

改用专用工具。 例如,它是专门为枚举本地网络设备及其相关地址而构建的

类似地,问题的一个答案表明,这应该同样达到目的

此外,通用型还为此提供了一个
net\u if\u addrs()
函数


还有另一个第三方模块是。

如果问题中包含具体内容,会很有帮助。如果您在两台机器上都获得了
127.0.0.1
::1
,这与在两台机器上获得
169.254.X.Y
或在两台机器上获得
10.0.0.10
是不同的(希望它们连接到两个不同的网络——但这是问题中应该包含的内容!)这取决于你想要的结果,我想知道你的广域网公共IP;您需要调用一个外部服务……事实上,这还不够具体,无法回答。我们不知道您想要的结果是什么(无论是公共地址还是私人地址),我们也不知道您实际得到的结果是什么,我们也不知道测试系统之间的网络拓扑,以了解您实际得到的结果是否出乎意料或不正确。@CharlesDuffy,我添加了一个更新。请让我知道这是否澄清了我的问题。你的编辑仍然没有解决你被问到的问题,比如你实际得到的地址。您还没有回答是要公共地址还是私人地址。如果这两台计算机在同一个网络上,而你正在拉公共地址,那么完全可以预期它们可能有相同的地址。