Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在套接字库(Python)中获取错误的IP!-[从另一个适配器获取信息]_Python_Windows_Sockets - Fatal编程技术网

在套接字库(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。谢谢,非常好用!唯一的问题是需要一个互联网连接。谢谢,工作完美!唯一的问题是需要互联网连接。