在套接字库(Python)中获取错误的IP!-[从另一个适配器获取信息]
我正在使用这个简单的代码:在套接字库(Python)中获取错误的IP!-[从另一个适配器获取信息],python,windows,sockets,Python,Windows,Sockets,我正在使用这个简单的代码: >>> import socket >>> socket.gethostbyname(socket.gethostname()) '192.168.160.1' 问题是这给了我错误的IP。执行一个简单的ipconfig,我发现它提供了另一个与VMWARE相关的适配器的信息: Adaptador de Ethernet VMware Network Adapter VMnet8: Dirección IPv4. . . . .
>>> import socket
>>> socket.gethostbyname(socket.gethostname())
'192.168.160.1'
问题是这给了我错误的IP。执行一个简单的ipconfig,我发现它提供了另一个与VMWARE相关的适配器的信息:
Adaptador de Ethernet VMware Network Adapter VMnet8:
Dirección IPv4. . . . . . . . . . . . . . : 192.168.160.1
Adaptador de LAN inalámbrica Wi-Fi:
Dirección IPv4. . . . . . . . . . . . . . : 192.168.1.51
我通过禁用VMware网络适配器VMnet8解决了这个问题。有办法避免吗?谢谢你的阅读
Python 3.8.6
Vmware 16.0.0.63036
您可以获取netifaces包以获取特定网络适配器的IP地址:
import netifaces as ni
ip = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
print(ip)
您可以使用任何接口代替“eth0”您可以获取netifaces包以获取特定网络适配器的IP地址:
import netifaces as ni
ip = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
print(ip)
您可以使用任何接口来代替“eth0”您似乎正在尝试查找将用于internet访问的网络接口的IP地址 如果你真的连接到了互联网,这会让你明白:
import socket
# create an datagram socket (single UDP request and response, then close)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# connect to an address on the internet, that's likely to always be up
# (the Google primary DNS is a good bet)
sock.connect(("8.8.8.8", 80))
# after connecting, the socket will have the IP in its address
print(sock.getsockname())
# done
sock.close()
在我的计算机上的结果,您的应与您自己的相匹配:
('192.168.0.132', 56618)
注意:这取决于是否有活动的internet连接以及您要连接以接受连接的服务。这在没有internet连接的内部网络上不起作用,除非您试图连接到一个可以可靠连接的地址,如路由器的管理接口,例如您似乎正在尝试查找用于internet访问的网络接口的IP地址 如果你真的连接到了互联网,这会让你明白:
import socket
# create an datagram socket (single UDP request and response, then close)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# connect to an address on the internet, that's likely to always be up
# (the Google primary DNS is a good bet)
sock.connect(("8.8.8.8", 80))
# after connecting, the socket will have the IP in its address
print(sock.getsockname())
# done
sock.close()
在我的计算机上的结果,您的应与您自己的相匹配:
('192.168.0.132', 56618)
注意:这取决于是否有活动的internet连接以及您要连接以接受连接的服务。这在没有internet连接的内部网络上不起作用,除非您试图连接到一个可以可靠连接的地址,比如路由器的管理接口,例如我找到了一个带有Wasif Hasan推荐的netifaces包的解决方案,而且还可以是通用的
import netifaces as ni
x = ni.gateways()
y = x['default'][2][1]
ip = ni.ifaddresses(y)[ni.AF_INET][0]['addr']
我用Wasif Hasan推荐的netifaces软件包找到了一个解决方案,它也可以是通用的
import netifaces as ni
x = ni.gateways()
y = x['default'][2][1]
ip = ni.ifaddresses(y)[ni.AF_INET][0]['addr']
你知道如何让它在Windows下工作吗?当我尝试获取我收到的名字和长字符串7A6EB123-89DC-439A-8975-8EFCFBE8E252,我尝试ip=ni。如果地址'A6EB123-89DC-439A-8975-8EFCFBE8E252'[ni.AF_INET][0]['addr'],并且没有使用密钥,我将其解决为ip=ni。如果地址'{A6EB123-89DC-439A-8975-8EFCFBE8E252}'[ni.AF_INET][0]['addr'],但它添加了一个不同的库。。。这是一个解决方案,但不是解决方案。感谢您对socket.gethostbynamesocket.gethostname的完美介绍,它为所有计算机和上下文提供了IP。您知道如何使它在Windows中工作吗?当我尝试获取我收到的名字和长字符串7A6EB123-89DC-439A-8975-8EFCFBE8E252,我尝试ip=ni。如果地址'A6EB123-89DC-439A-8975-8EFCFBE8E252'[ni.AF_INET][0]['addr'],并且没有使用密钥,我将其解决为ip=ni。如果地址'{A6EB123-89DC-439A-8975-8EFCFBE8E252}'[ni.AF_INET][0]['addr'],但它添加了一个不同的库。。。这是一个解决方案,但不是解决方案。谢谢你关于socket.gethostbynamesocket.gethostname的完美,它在所有计算机和上下文中都提供了IP。谢谢,非常好用!唯一的问题是需要一个互联网连接。谢谢,工作完美!唯一的问题是需要互联网连接。