最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 如何查看Wifi密碼

 更新時(shí)間:2017年01月21日 15:57:30   投稿:lqh  
這篇文章主要介紹了Android 如何查看Wifi密碼的相關(guān)資料,需要的朋友可以參考下

Android 如何查看Wifi密碼

前言:

在Android手機(jī)中,連接了Wifi之后,密碼一般就看不到了,那有沒有什么辦法可以查看到這些密碼呢?辦法一般有兩種,一種是通過查看wifi的配置文件,一種是使用命令。對(duì)于第一種,網(wǎng)上已經(jīng)有很多了,大致就是先root,然后使用一些手機(jī)助手或者手機(jī)文件查看之類的工具(如ES、Root Exploere等)來查看wifi配置文件(位置是進(jìn)入data/misc/wifi,目錄里有個(gè)wpa_supplicant.conf或者其他文件名以.conf結(jié)尾的文件)。

但是用這一種方法,有時(shí)會(huì)遇到一些問題,比如當(dāng)手機(jī)的root不夠徹底時(shí),會(huì)引發(fā)遇想不到的問題。比如小米手機(jī),當(dāng)我們使用root工具去root后,看似root成功了,卻會(huì)引起一些問題,比如授權(quán)出問題了、wifi不可用了、手機(jī)無法連接到電腦了等。
那如果不用這種方式,還有什么方式呢?這就是今天的主題,

查看wifi密碼的第二種方式:命令。

先來看看效果圖:

從圖中,我們可以看到,通過依次輸入命令后,拿到了wifi的用戶名(test)和密碼(12345)?,F(xiàn)在來看這幾個(gè)命令。

1、adb connect 192.168.1.6。這是使用adb來連接手機(jī)。如果adb沒有配置到環(huán)境變量中,請(qǐng)先定位到adb所在的目錄,然后執(zhí)行該命令或者將其所在目錄加入環(huán)境變量中。

2、adb shell。這是啟動(dòng)手機(jī)的命令終端。

3、cat /data/misc/wifi/*.conf。獲取/data/misc/wifi文件夾下所有conf文件后綴的信息。

那在代碼上要如何去實(shí)現(xiàn)呢?下面是實(shí)現(xiàn)的代碼。

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\n"); 
      dataOutputStream.writeBytes("exit\n"); 
      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")獲取root權(quán)限。
2、通過process.getOutputStream()和process.getInputStream()獲取終端的輸入流和輸出流。
3、通過dataOutputStream.writeBytes("cat /data/misc/wifi/*.conf\n")往終端中輸入命令。注意,這里必須要有\(zhòng)n作為換行,否則會(huì)與后一個(gè)exit命令作為一個(gè)命令,最終導(dǎo)致命令執(zhí)行失敗,無法得到結(jié)果。
4、通過dataInputStream獲取命令執(zhí)行結(jié)果,并以UTF-8的編碼轉(zhuǎn)換成字符串。
5、使用正則表達(dá)式過濾出wifi的用戶名和密碼。

附上顯示密碼的代碼:

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+"\n密碼:"+wifiInfos.get(position).Password); 
      return convertView; 
    } 
     
  } 
 
} 

最終效果圖:

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Android 側(cè)滑關(guān)閉Activity的實(shí)例

    Android 側(cè)滑關(guān)閉Activity的實(shí)例

    這篇文章主要介紹了Android 側(cè)滑關(guān)閉Activity的實(shí)例的相關(guān)資料,好的手機(jī)現(xiàn)在沒有物理返回鍵,或者說統(tǒng)一Android 與IOS 軟件功能的時(shí)候,需要側(cè)滑關(guān)閉,需要的朋友可以參考下
    2017-07-07
  • kotlin項(xiàng)目加入Glide圖片加載庫(kù)并使用GlideApp的方法

    kotlin項(xiàng)目加入Glide圖片加載庫(kù)并使用GlideApp的方法

    這篇文章主要給大家介紹了關(guān)于kotlin項(xiàng)目加入Glide圖片加載庫(kù)并使用GlideApp的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2019-01-01
  • Kotlin Fragment使用方法詳解

    Kotlin Fragment使用方法詳解

    Fragment是Android3.0后引入的一個(gè)新的API,他出現(xiàn)的初衷是為了適應(yīng)大屏幕的平板電腦, 當(dāng)然現(xiàn)在他仍然是平板APP UI設(shè)計(jì)的寵兒,而且我們普通手機(jī)開發(fā)也會(huì)加入這個(gè)Fragment, 我們可以把他看成一個(gè)小型的Activity,又稱Activity片段
    2023-01-01
  • Android中RecyclerView 滑動(dòng)時(shí)圖片加載的優(yōu)化

    Android中RecyclerView 滑動(dòng)時(shí)圖片加載的優(yōu)化

    本篇文章主要介紹了Android中RecyclerView 滑動(dòng)時(shí)圖片加載的優(yōu)化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android音頻編輯之音頻轉(zhuǎn)換PCM與WAV

    Android音頻編輯之音頻轉(zhuǎn)換PCM與WAV

    這篇文章主要為大家詳細(xì)介紹了Android音頻編輯之音頻轉(zhuǎn)換PCM與WAV,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android?通用視頻組件開發(fā)過程詳解

    Android?通用視頻組件開發(fā)過程詳解

    這篇文章主要介紹了Android?通用視頻組件開發(fā)的詳細(xì)過程,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Android Gradle Build Error:Some file crunching failed, see logs for details的快速解決方法

    Android Gradle Build Error:Some file crunching failed, see l

    這篇文章主要介紹了Android Gradle Build Error:Some file crunching failed, see logs for details的快速解決方法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Android 獲取藍(lán)牙Mac地址的正確方法

    Android 獲取藍(lán)牙Mac地址的正確方法

    android 從6.0開始,通過BluetoothAdapter.getDefaultAdapter().getAddress()獲取的地址是一個(gè)固定值02:00:00:00:00:00。下面給大家介紹Android 獲取藍(lán)牙Mac地址的正確方法,一起看看吧
    2017-12-12
  • 圖文詳解自定義View視圖的屬性及引用

    圖文詳解自定義View視圖的屬性及引用

    這篇文章主要介紹了圖文詳解自定義View視圖的屬性及引用,由于Android自帶的視圖無法滿足自己需求,又或者美觀度不夠自己的要求,我們就要自來親自設(shè)計(jì)自己的視圖,需要的朋友可以參考下
    2023-04-04
  • Android Intent封裝的實(shí)例詳解

    Android Intent封裝的實(shí)例詳解

    這篇文章主要介紹了Android Intent封裝的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

旬阳县| 东乡族自治县| 黄冈市| 岱山县| 上饶市| 长沙市| 白朗县| 平武县| 许昌县| 烟台市| 宜良县| 建平县| 呼和浩特市| 临朐县| 泽州县| 富蕴县| 和硕县| 庆元县| 湛江市| 临武县| 峨边| 襄汾县| 丰原市| 武汉市| 岱山县| 泰来县| 大理市| 台东县| 鄱阳县| 和静县| 安乡县| 青铜峡市| 高雄市| 犍为县| 永春县| 西宁市| 垦利县| 舒兰市| 中宁县| 阜新市| 丹寨县|