获取 127.0.1.1 而不是 192.168.1.* ip ubuntu python

Getting 127.0.1.1 instead of 192.168.1.* ip ubuntu python

我是 python 的新手。我想获取系统的ipaddress。我连接在局域网中。当我使用下面的代码获取 ip 时,它显示 127.0.1.1 而不是 192.168.1.32。为什么它不显示 LAN ip。那我怎样才能得到我的局域网IP。每个教程仅以这种方式显示。我还通过连接移动热点进行了检查。尽管,它显示相同。

import socket    
hostname = socket.gethostname()    
IPAddr = socket.gethostbyname(hostname)    
print("Your Computer Name is:" + hostname)    
print("Your Computer IP Address is:" + IPAddr)    

输出:

Your Computer Name is:smackcoders
Your Computer IP Address is:127.0.1.1

所需输出:

Your Computer Name is:smackcoders
Your Computer IP Address is:192.168.1.32

此解决方案适用于我 Windows。如果您使用的是 Linux,您可以试试这行代码:

IPAddr = socket.gethostbyname(socket.getfqdn())

How can I get the IP address of eth0 in Python?

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

根据上面的“/etc/hosts”文件内容,您的 IP 地址映射为“127.0.1.1”到您的主机名。这导致名称解析为 127.0.1.1。您可以尝试 removing/commenting 这一行并重新运行。

我的 raspi 遇到了同样的问题。

host_name = socket.gethostname()`
host_addr = socket.gethostbyname(host_name)

现在如果我打印 host_addr,它会打印 127.0.1.1。 所以我发现了这个:https://www.raspberrypi.org/forums/viewtopic.php?t=188615#p1187999

host_addr = socket.gethostbyname(host_name + ".local")

它奏效了。

我遇到了和你一样的问题。但我在自己的想法的帮助下得到了解决方案,不用担心它使用起来很简单。 如果您熟悉 linux,您应该听说过 ifconfig 命令,其中 return 有关网络接口的信息,并且您还应该了解 grep 命令过滤包含的行指定字词 现在只需打开终端并输入

ifconfig | grep 255.255.255.0

然后点击 enter 现在您将单独获得 wlan inet 地址行,如下所示

inet 192.168.43.248  netmask 255.255.255.0  broadcast 192.168.43.255

在你的终端 在您的 python 脚本中只需插入

#!/usr/bin/env python
import subprocess
cmd = "ifconfig | grep 255.255.255.0"
inet = subprocess.check_output(cmd, shell = True)
inet = wlan.decode("utf-8")
inet = wlan.split(" ")
inet_addr = inet[inet.index("inet")+1]
print(inet_addr)

这个脚本 return 你的本地 ip 地址,这个脚本对我有用,我希望它对你的 linux 机器有用 一切顺利