안 드 로 이 드 는 어떻게 와 이 파이 비밀 번 호 를 봅 니까?
8037 단어 Android와 이 파이 비밀번호
선언:
안 드 로 이 드 폰 에서 와 이 파 이 를 연결 하면 비밀 번 호 는 일반적으로 보이 지 않 습 니 다.이 비밀 번 호 를 볼 수 있 는 방법 은 없 을까요?방법 은 일반적으로 두 가지 가 있 는데,하 나 는 와 이 파이 의 프로필 을 보 는 것 이 고,하 나 는 명령 을 사용 하 는 것 이다.첫 번 째,인터넷 에는 이미 많은 것 이 있 습 니 다.대체적으로 루트 를 먼저 사용 한 다음 에 핸드폰 조수 나 핸드폰 파일 조회 와 같은 도구(예 를 들 어 ES,Root Exploere 등)를 사용 하여 와 이 파이 설정 파일(위 치 는 data/misc/wifi 에 들 어 갑 니 다.디 렉 터 리 에 wpa 가 있 습 니 다.supplicant.conf 또는 다른 파일 이름 이.conf 로 끝 나 는 파일).
그러나 이 방법 으로 는 휴대 전화의 루트 가 철저 하지 않 을 때 예상 치 못 한 문 제 를 일 으 킬 수 있다.예 를 들 어 샤 오미 핸드폰 은 우리 가 루트 도 구 를 사용 하여 루트 를 제거 한 후에 루트 가 성공 한 것 처럼 보이 지만 일부 문 제 를 일 으 킬 수 있다.예 를 들 어 권한 수여 에 문제 가 생 겼 고 와 이 파 이 를 사용 할 수 없 으 며 핸드폰 이 컴퓨터 에 연결 되 지 못 하 는 등 이다.
그렇다면 이런 방식 을 쓰 지 않 는 다 면 어떤 방법 이 있 을 까?이것 이 바로 오늘 의 주제 이다.
와 이 파이 비밀 번 호 를 보 는 두 번 째 방법:명령.
먼저 효과 도 를 살 펴 보 자.
그림 에서 명령 을 순서대로 입력 한 후 와 이 파이 의 사용자 이름(test)과 비밀번호(12345)를 받 은 것 을 볼 수 있다.지금 이 몇 가지 명령 을 보 자.
1、adb connect 192.168.1.6。이것 은 adb 를 사용 하여 휴대 전 화 를 연결 하 는 것 이다.adb 가 환경 변수 에 설정 되 어 있 지 않 으 면 adb 가 있 는 디 렉 터 리 를 찾 은 다음 이 명령 을 실행 하거나 디 렉 터 리 를 환경 변수 에 추가 하 십시오.
2、adb shell。이것 은 휴대 전 화 를 시작 하 는 명령 단말기 다.
3、cat /data/misc/wifi/*.conf。/data/misc/wifi 폴 더 의 모든 conf 파일 접미사 정 보 를 가 져 옵 니 다.
그럼 코드 에 서 는 어떻게 실현 해 야 합 니까?다음은 실 현 된 코드 입 니 다.
WifiManage.Java
package com.example.wifipassword;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WifiManage {
public List<WifiInfo> Read() throws Exception {
List<WifiInfo> wifiInfos=new ArrayList<WifiInfo>();
Process process = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
StringBuffer wifiConf = new StringBuffer();
try {
process = Runtime.getRuntime().exec("su");
dataOutputStream = new DataOutputStream(process.getOutputStream());
dataInputStream = new DataInputStream(process.getInputStream());
dataOutputStream
.writeBytes("cat /data/misc/wifi/*.conf
");
dataOutputStream.writeBytes("exit
");
dataOutputStream.flush();
InputStreamReader inputStreamReader = new InputStreamReader(
dataInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
wifiConf.append(line);
}
bufferedReader.close();
inputStreamReader.close();
process.waitFor();
} catch (Exception e) {
throw e;
} finally {
try {
if (dataOutputStream != null) {
dataOutputStream.close();
}
if (dataInputStream != null) {
dataInputStream.close();
}
process.destroy();
} catch (Exception e) {
throw e;
}
}
Pattern network = Pattern.compile("network=\\{([^\\}]+)\\}", Pattern.DOTALL);
Matcher networkMatcher = network.matcher(wifiConf.toString() );
while (networkMatcher.find() ) {
String networkBlock = networkMatcher.group();
Pattern ssid = Pattern.compile("ssid=\"([^\"]+)\"");
Matcher ssidMatcher = ssid.matcher(networkBlock);
if (ssidMatcher.find() ) {
WifiInfo wifiInfo=new WifiInfo();
wifiInfo.Ssid=ssidMatcher.group(1);
Pattern psk = Pattern.compile("psk=\"([^\"]+)\"");
Matcher pskMatcher = psk.matcher(networkBlock);
if (pskMatcher.find() ) {
wifiInfo.Password=pskMatcher.group(1);
} else {
wifiInfo.Password=" ";
}
wifiInfos.add(wifiInfo);
}
}
return wifiInfos;
}
}
WifiInfo.java
package com.example.wifipassword;
public class WifiInfo {
public String Ssid="";
public String Password="";
}
주:1.Runtime.getRuntime().exec("su")를 통 해 루트 권한 을 가 져 옵 니 다.
2.process.getOutputStream()과 process.getInputStream()을 통 해 터미널 의 입력 흐름 과 출력 흐름 을 가 져 옵 니 다.
3.dataOutputStream.writeBytes("cat/data/misc/wifi/*.conf")를 통 해 터미널 에 명령 을 입력 합 니 다.이 곳 은 줄 을 바 꿔 야 합 니 다.그렇지 않 으 면 다음 exit 명령 과 명령 으로 실 패 했 고 결 과 를 얻 을 수 없습니다.
4.dataInputStream 을 통 해 명령 실행 결 과 를 가 져 오고 UTF-8 인 코딩 으로 문자열 로 변환 합 니 다.
5.정규 표현 식 을 사용 하여 와 이 파이 의 사용자 이름과 비밀 번 호 를 걸 러 냅 니 다.
비밀 번 호 를 표시 하 는 코드 를 첨부 합 니 다:
package com.example.wifipassword;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private WifiManage wifiManage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wifiManage = new WifiManage();
try {
Init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void Init() throws Exception {
List<WifiInfo> wifiInfos = wifiManage.Read();
ListView wifiInfosView=(ListView)findViewById(R.id.WifiInfosView);
WifiAdapter ad = new WifiAdapter(wifiInfos,MainActivity.this);
wifiInfosView.setAdapter(ad);
}
public class WifiAdapter extends BaseAdapter{
List<WifiInfo> wifiInfos =null;
Context con;
public WifiAdapter(List<WifiInfo> wifiInfos,Context con){
this.wifiInfos =wifiInfos;
this.con = con;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return wifiInfos.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return wifiInfos.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
convertView = LayoutInflater.from(con).inflate(android.R.layout.simple_list_item_1, null);
TextView tv = (TextView)convertView.findViewById(android.R.id.text1);
tv.setText("Wifi:"+wifiInfos.get(position).Ssid+"
:"+wifiInfos.get(position).Password);
return convertView;
}
}
}
최종 효과 도:읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.