ubuntu16.04 python及terminal对wlan进行操作
iwconfig
不推荐,仅供参考
使用iwconfig命令
搜索无线网 iwlist wlan0 scan
连接无密码的无线网 iwconfig wlan0 essid ChinaNet 其中ChinaNet是搜索到的无线网essid
连接有密码的无线网 iwconfig wlan0 essid ChinaNet key xxxx 其中xxxx是密码
启用无线网卡 ifconfig wlan0 up
通过dhcp获取IP dhclient wlan0 或 dhcpcd wlan0
python测试用demo
import os
import re
wlan_origin = os.popen("iwlist wlp2s0 scan").readlines()
print(wlan_origin)
wlan = list(filter(lambda x: x.find("ESSID") >= 0, wlan_origin)) # 获取list中所有包含ESSID的值
wlan = [x.strip(' ').strip('\n').strip('ESSID:').strip('"') for x in wlan] # 处理list中所有包含ESSID的值
wlan_key = list(filter(lambda x: x.find("Encryption") >= 0, wlan_origin)) # 获取list中所有包含ESSID的值
wlan_key = [x.strip(' ').strip('\n') for x in wlan_key] # 处理list中所有包含ESSID的值
print(wlan)
print(wlan_key)
# wifi_callback = os.system(f"nmcli dev wifi connect {wlan[1]} password ab12345678") # 连接wifi
# print(wifi_callback)
nmcli
获取wifi list
def wifi_list():
"""
获取当前NUC发现的wifi列表
:return:
"""
"""
nmcli dev wifi获取系统无线网卡信息
连接方式:nmcli dev wifi connect [essid] password [password]
"""
wlan_origin = os.popen("nmcli device wifi").readlines() # 获取无线网卡wifi列表
print(wlan_origin)
wlan = [re.split("\s{2,}", x) for x in wlan_origin] # 处理数据
for i in wlan[:]:
if i[1] == "--":
wlan.remove(i)
print(wlan)
# wlan = [re.split("\s{2,}", x)].append(wlan)
"""
SSID:WIFI名称
MODE:网络拓扑形式 基础网Infra和自组网Adhoc
CHAN:wifi信道
RATE:wifi物理速率
SIGNAL:wifi信号强度
BARS:信号强度图表
SECURITY:加密方式 若值为“--”则无加密
"""
获取当前网卡连接状态
def connect_status():
"""
获取当前网卡连接状态
:return: 无线网卡状态,数组
"""
wlan_status = os.popen("nmcli device ").readlines() # 获取网卡连接状态
print(wlan_status)
wlan_status = [re.split("\s{2,}", x) for x in wlan_status] # 处理数据
print(wlan_status)
for status in wlan_status:
if status[1] == "wifi":
return status # 返回无线网卡状态,数组
return "Wi-Fi disable"
# noinspection PyUnreachableCode
"""
DEVICE TYPE STATE CONNECTION
eno1 ethernet connected 有线连接 1
wlp2s0 wifi connecting (configuring) adocir
lo loopback unmanaged
"""
连接wifi
def connect_wifi(wifi_name, password):
"""
连接wifi
:param wifi_name: wifi名称
:param password: wifi密码
:return:
"""
nmcli_connection_show = os.popen("nmcli connection show").readlines() # 获取无线网卡已储存的wifi列表
nmcli_connection_show = [re.split("\s{2,}", x) for x in nmcli_connection_show]
print(nmcli_connection_show)
check = False
for i in nmcli_connection_show: # 连接wifi
if i[0] == wifi_name:
result = os.popen(f"nmcli connection up {wifi_name}") # 已存在的ssid连接
res = result.read()
for line in res.splitlines():
if ("successfully" in line) and (connect_status()[2] == "connected"):
print("connection_success")
check = True
if not check:
try:
result = os.popen(f"nmcli --ask device wifi connect {wifi_name} password {password}") # wifi密码连接
res = result.read()
for line in res.splitlines():
print(line)
if ("successfully" in line) and (connect_status()[2] == "connected"):
print("connection_success")
except:
print("ERROR")
断开连接
def disconnect_wifi():
"""
断开wifi连接
:return:
"""
os.system(f"nmcli device disconnect {connect_status()[0]}") # 断开连接