java windows wifi密码_java 获取本机连接过的所有WiFI密码

该博客介绍了一个Java程序,用于遍历Windows系统并获取已连接过的所有WiFi的密码。通过执行命令行指令,程序将结果保存为文本文件,方便用户查找所需WiFi的密码。内容包括程序的实现方法、主要函数解释及使用步骤,旨在帮助用户快速找到设备上的WiFi配置信息。
摘要由CSDN通过智能技术生成

windows,cmd中可以通过命令行输入指令:

netsh wlan show profiles

来获取连接过的WiFi名:

c4a0ea486a6aac9565244d6e1eb04ca7.png

然后可以输入命令:获取WiFi名为 哦 的个密码

netsh wlan show profiles name=哦 key=clear

43263e1520ee41719b96a7ab1708f9bf.png

也可以输入指令:遍历查询所有的wifi信息,然后把控制台打印的结果重定向到文件中保存下来,下次只要打开文件查询即可:

指令如下:我保存到D:\passworld.txt这个文件夹中,下次用文本编辑器打开查找即可。

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do  @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear >>D:\passworld.txt

但是呢,毕竟连接过的WiFi挺多的。里面的WiFi配置信息有的是我们不需要知道的,这里写一个java的命令行程序来遍历,获取,生成WiFi密码文件,生成的目录是桌面:C:\Users\Administrator\Desktop\所有连过的WiFi密码.txt

package system.cmd;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Scanner;

public class GetWiFiPassWord

{

/**

* @param commandStr

* cmd 控制台命令

* @return 该控制台命令commandStr运行的结果

*/

public static String exeCmd(String commandStr)

{

String result = null;

BufferedReader br = null;

try

{

Process p = Runtime.getRuntime().exec(commandStr);

br = new BufferedReader(new InputStreamReader(p.getInputStream()));

String line = null;

StringBuilder sb = new StringBuilder();

while ((line = br.readLine()) != null)

{

sb.append(line + "\n");

}

// System.out.println(sb.toString());

result = sb.toString();

} catch (Exception e)

{

e.printStackTrace();

} finally

{

if (br != null)

{

try

{

br.close();

} catch (Exception e)

{

e.printStackTrace();

}

}

}

return result;

}

/**

* @throws FileNotFoundException

*/

public static void printWiFiPassWord(String result)

throws FileNotFoundException

{

// TODO Auto-generated method stub

Scanner scanner = new Scanner(result);

String line;

String wifi;

String passworld;

while ((line = scanner.nextLine()) != null)

{

// SSID 名称 :“Hello”

if (line.contains("SSID 名称"))

{

wifi = line.substring(line.lastIndexOf("“") + 1,

line.length() - 1);

System.out.println("无线:" + wifi.trim());// trim()去掉多余的空白符

}

// 关键内容 : *********

else if (line.contains("关键内容"))

{

passworld = line.substring(line.lastIndexOf(":") + 1);

System.out.println("密码:" + passworld.trim());// trim()去掉多余的空白符

}

}

}

public static String getWiFiMap(String result) throws FileNotFoundException

{

// TODO Auto-generated method stub

Scanner scanner = new Scanner(result);

String line;

String wifi;

String passworld;

StringBuilder buff = new StringBuilder();

HashMap WiFiMap = new HashMap();

try

{

/*

* 接口 WLAN 上的配置文件 哦: --->WiFi名是哦,位于"接口 WLAN 上的配置文件"这句话和冒号之间

*/

// 有这句话说明包含有密码

String WiFiNameLineFlag = "接口 WLAN 上的配置文件";

// 捕获java.util.NoSuchElementException

while ((line = scanner.nextLine()) != null)

{

// SSID 名称 :“Hello”

if (line.contains(WiFiNameLineFlag))

{

wifi = line.substring(

line.lastIndexOf(WiFiNameLineFlag)

+ WiFiNameLineFlag.length(),

line.lastIndexOf(":"));

// System.out.print("无线:"+wifi.trim());//trim()去掉多余的空白符

buff.append("无线:" + wifi.trim() + "|");

}

// 关键内容 : *********

if (line.contains("关键内容"))

{

passworld = line.substring(line.lastIndexOf(":") + 1);

// System.out.println("|密码:"+passworld.trim());//trim()去掉多余的空白符

buff.append("密码:" + passworld.trim());

}

}

} catch (Exception e)

{

// TODO: handle exception

}

return buff.toString();

}

/**

* 获取连接过的WiFi的名称列表。

*

* @return 所有连接过的WiFi名称列表

*/

public static ArrayList getWiFiNameList()

{

String allWiFiName = "netsh wlan show profiles";

String cmdResult = GetWiFiPassWord.exeCmd(allWiFiName);

Scanner scanner = new Scanner(cmdResult);// 扫描结果

ArrayList WiFiNameList = new ArrayList();

String line = null;

try

{

// 会抛出异常 java.util.NoSuchElementException:

while ((line = scanner.nextLine()) != null)

{

// System.out.println(line);

if (line.contains(":"))

{

String name = line.substring(line.lastIndexOf(":") + 1)

.trim();

// :后面没有名字的表示这只是个冒号,不是我们想要的WiFi名

if (!name.equals(""))

WiFiNameList.add(name);

}

}

} catch (Exception e)

{

// 不做处理,这里是为了让程序能运行下去

// TODO: handle exception

}

return WiFiNameList;

}

/**

* cmd查询name对应的WiFi名称配置文件,并返回cmd执行的结果

*

* @param name

* @return

*/

public static String getPassWordByName(String name)

{

String commandStr = "netsh wlan show profile name=" + name

+ " key=clear";

String result = GetWiFiPassWord.exeCmd(commandStr);

return result;

}

public static void main(String[] args)

throws FileNotFoundException, InterruptedException

{

// 保存下标准输出流

PrintStream out = System.out;

System.out.println("请勿关闭当前窗口");

System.out.println("正在生成WiFi密码文件...");

String outFile = "所有连过的WiFi密码.txt";

PrintStream ps = new PrintStream(outFile); // 创建文件输出流

System.setOut(ps); // 设置使用新的输出流,System.out.XXX将输入到文件中

// 获取WiFi名列表

ArrayList WiFiNameList = getWiFiNameList();

for (String string : WiFiNameList)

{

// 根据每个WiFi列表中的WiFi名称,获取WiFi的密码

System.out.println(getWiFiMap(getPassWordByName(string)));

}

// 恢复到原来的标准输出流

System.setOut(out);

System.out.println(

"以生成WiFi密码文件,路径:.\\所有连过的WiFi密码.txt");

//Thread.currentThread().sleep(1000 * 10);

}

}

运行结果:

请勿关闭当前窗口

正在生成WiFi密码文件...

以生成WiFi密码文件,路径:.\所有连过的WiFi密码.txt

打开当前工作路径下的:所有连过的WiFi密码.txt 文件即可查看WiFi密码,

这里过滤掉了大量的无关信息。只留下WiFi名和密码,这样只有电脑连接过的WiFi下次想在手机或者其他设置上连接该WiFi的时候就不愁找不到密码了。

下面给出可执行获取密码的可执行jar包:获取本机连过的所有WiFi密码

下载后,双击jar包运行即可。

参考博客:

LisenYang的专栏 的博客: 查看计算机连接过的WiFi密码(三种方法)

小蓝的博客  的博客: CMD 获取所有笔记本中连接过的WiFi密码

更新说明:

之前写的我用的是绝对路径,换了路径之后就跑不起来了。以后尽量不要使用绝对路径,生成的文件可以生成在当前目录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值