如何在 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
谢谢伙计!!
我目前正在使用这种方法在 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
谢谢伙计!!