呼入电脑IP地址

Calling In Computers IP Address

我正在尝试找到一种方法让 Python 确定我的计算机 IP 地址是什么,并且可能会出现奇怪的结果。一些简单的事实,我正在使用 Windows 10 和 Linux 子系统(Ubuntu 终端应用程序)并且是 运行 python 3.7.6。

我最初的尝试是使用套接字。即

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 地址与套接字调用的地址完全不同。

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

我的主要问题是:

How do I call in my computer's unique IPv4 address using Python?

编辑:

解决评论中的问题:

最终,我要做的是访问位于两台不同计算机上不同目录中的文件。我正在为我正在进行的数据分析项目编写脚本,并使用 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_address 在使用套接字时两台计算机都是一样的。我需要做的是获取我正在使用的计算机的唯一地址并替换循环中的 IP 地址。

您使用的工具错误。

使用 socket.gethostname() 获取您自己的主机名,然后 socket.gethostbyname() 将其解析为 IP 告诉您您的操作系统建议使用哪个 IP 地址进行环回通信。但是,这并没有告诉您网络上其他地方的系统可能使用哪些地址与您进行通信

改用专门的工具。

the ifaddr Python library 为例,它是专门为枚举本地网络设备和与每个设备关联的地址而构建的。

类似地,How to get Network Interface Card names in Python? suggests git_nic 的答案之一,应该类似地达到目的。

此外,通用 psutil Python library 提供了一个 net_if_addrs() 功能。

另一个用于此目的的第 3 方模块是 netifaces