Socket IO 返回 127.0.0.1 作为主机地址,而不是我的设备上的 192.168.0.*

问题描述 投票:0回答:3

当我运行以下代码来确定设备的本地 IP 地址时,我得到 127.0.0.1 而不是 192.168.0.101。

import socket
import threading

PORT = 8080
HOST_NAME = socket.gethostname()
print(HOST_NAME)
SERVER = socket.gethostbyname(HOST_NAME)

print(SERVER)

我在控制台上得到的输出是

MyDeviceName.local
127.0.0.1
python network-programming
3个回答
6
投票

127.0.0.1是localhost地址,没错。如果您想要设备的地址,请执行以下操作:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])

0
投票

试试这个:

注意 - 使用 Python 3.6.8 在 CentOS 7.9 上测试,使用 Python 3.8.10 在 Ubuntu 20.04 上测试

注意 - 使用 Ubuntu 20.04 时可能需要安装 psutil

import socket

import psutil

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
my_eip = s.getsockname()[0]
nics = psutil.net_if_addrs()
my_enic = [i for i in nics for j in nics[i]
           if j.address == my_eip and j.family == socket.AF_INET][0]
print('My Ethernet NIC name is {0} and my IPv4 address is {1}.'.format(
    my_enic, my_eip))

输出:

My Ethernet NIC name is enp0s3 and my IPv4 address is 192.168.0.101.

0
投票

这解决了我的问题。只需将“.local”添加到 HOST_NAME

import socket
import threading

PORT = 8080
HOST_NAME = socket.gethostname()
print(HOST_NAME)
SERVER = socket.gethostbyname(HOST_NAME+".local")

print(SERVER)

© www.soinside.com 2019 - 2024. All rights reserved.