如何在 Python 中获取无线 LAN 适配器 Wi-Fi IP 地址?

how to get Wireless LAN adapter Wi-Fi IP Address in Python?

我目前正在使用这种方法在 python 上显示我的 IP 地址,但我意识到这不是我需要的 IP 地址

hostname = socket.gethostname() 

IPAddr => socket.gethostbyname(hostname)

我的代码有问题吗?还是只是使用方法不同?

试试这个:

import socket
def get_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        # doesn't even have to be reachable
        s.connect(('10.255.255.255', 1))
        IP = s.getsockname()[0]
    except:
        IP = '127.0.0.1'
    finally:
        s.close()
    return IP

然后使用get_ip()获取你的ip。

参考:Finding local IP addresses using Python's stdlib

Windows具体实现,0.1s内运行。

def wlan_ip():
    import subprocess
    result=subprocess.run('ipconfig',stdout=subprocess.PIPE,text=True).stdout.lower()
    scan=0
    for i in result.split('\n'):
        if 'wireless' in i: scan=1
        if scan:
            if 'ipv4' in i: return i.split(':')[1].strip()
print(wlan_ip()) #usually 192.168.0.(DHCP assigned ip)

命令的控制台输出 'ipconfig':

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::f485:4a6a:e7d5:1b1c%4
   IPv4 Address. . . . . . . . . . . : 192.168.0.131 #<-Returns this part

   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.0.1

获取IP地址

import netifaces
netifaces.gateways()
iface = netifaces.gateways()['default'][netifaces.AF_INET][1]

ip = netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr']

print(ip)

这对我有用,但我将 'wireless' 更改为 'wi-fi',因为输出更改为西班牙语 Windows 中的“Adaptador de LAN inalámbrica Wi-Fi”。 这个代码会更国际化

    for i in result.split('\n'):
        if 'wi-fi' in i: scan=1

谢谢伙计!!