2016-01-07 34 views
1

我想根據本教程顯示所有設備來自網絡:http://android-er.blogspot.ro/2015/12/lookup-manufacturer-info-by-mac-address.html但無緣無故,我只獲得路由器IP和Mac ...但(奇怪的部分)..當我掃描與Fing頭(其他Android應用程序)後,我掃描我的應用我得到的所有結果..從scanwifi.jar列出網絡上的所有設備 - Android

我的代碼:

package com.nliplace.nli.unealta; 
    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.Button; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

    import java.io.BufferedReader; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 
    import java.util.ArrayList; 

    public class scanwifi extends AppCompatActivity { 

     Button btnRead; 
     TextView textResult; 

     ListView listViewNode; 
     ArrayList<Node> listNote; 
     ArrayAdapter<Node> adapter; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_scanwifi); 
      btnRead = (Button)findViewById(R.id.readclient); 
      textResult = (TextView)findViewById(R.id.result); 

      listViewNode = (ListView)findViewById(R.id.nodelist); 
      listNote = new ArrayList<>(); 
      ArrayAdapter<Node> adapter = 
        new ArrayAdapter<Node>(
          scanwifi.this, 
          android.R.layout.simple_list_item_1, 
          listNote); 
      listViewNode.setAdapter(adapter); 

      listViewNode.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        Node node = (Node) parent.getAdapter().getItem(position); 
        Toast.makeText(scanwifi.this, 
          "MAC:\t" + node.mac + "\n" + 
            "IP:\t" + node.ip + "\n" + 
            "company:\t" + node.company + "\n" + 
            "country:\t" + node.country + "\n" + 
            "addressL1:\t" + node.addressL1 + "\n" + 
            "addressL2:\t" + node.addressL2 + "\n" + 
            "addressL3:\t" + node.addressL3 + "\n" + 
            "type:\t" + node.type + "\n" + 
            "startHex:\t" + node.startHex + "\n" + 
            "endHex:\t" + node.endHex + "\n" + 
            "startDec:\t" + node.startDec + "\n" + 
            "endDec:\t" + node.endDec, 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      btnRead.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        new TaskReadAddresses(listNote, listViewNode).execute(); 
       } 
      }); 
     } 



     class Node { 
      String ip; 
      String mac; 

      String jsonBody; 
      String startHex; 
      String endHex; 
      String startDec; 
      String endDec; 
      String company; 
      String addressL1; 
      String addressL2; 
      String addressL3; 
      String country; 
      String type; 

      String remark; 

      String queryString = "http://www.macvendorlookup.com/api/v2/"; 

      Node(String ip, String mac){ 
       this.ip = ip; 
       this.mac = mac; 
       queryMacVendorLookup(); 
      } 

      @Override 
      public String toString() { 
       return "IP: " + ip + "\n" + "MAC: " + mac + "\n" + company + "\n" + remark; 
      } 

      private String sendQuery(String qMac) throws IOException{ 
       String result = ""; 

       URL searchURL = new URL(queryString + qMac); 

       HttpURLConnection httpURLConnection = (HttpURLConnection) searchURL.openConnection(); 

       if(httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK){ 
        InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream()); 
        BufferedReader bufferedReader = new BufferedReader(
          inputStreamReader, 
          8192); 

        String line = null; 
        while((line = bufferedReader.readLine()) != null){ 
         result += line; 
        } 

        bufferedReader.close(); 
       } 

       return result; 
      } 


      private void ParseResult(String json){ 

       try { 
        JSONArray jsonArray = new JSONArray(json); 
        JSONObject jsonObject = (JSONObject) jsonArray.get(0); 
        startHex = jsonObject.getString("startHex"); 
        endHex = jsonObject.getString("endHex"); 
        startDec = jsonObject.getString("startDec"); 
        endDec = jsonObject.getString("endDec"); 
        company = jsonObject.getString("company"); 
        addressL1 = jsonObject.getString("addressL1"); 
        addressL2 = jsonObject.getString("addressL2"); 
        addressL3 = jsonObject.getString("addressL3"); 
        country = jsonObject.getString("country"); 
        type = jsonObject.getString("type"); 
        remark = "OK"; 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        remark = e.getMessage(); 
       } 

      } 

      private void queryMacVendorLookup(){ 
       try { 
        jsonBody = sendQuery(mac); 
        ParseResult(jsonBody); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     private class TaskReadAddresses extends AsyncTask<Void, Node, Void> { 

      ArrayList<Node> array; 
      ListView listView; 

      TaskReadAddresses(ArrayList<Node> array, ListView v){ 
       listView = v; 
       this.array = array; 
       array.clear(); 
       textResult.setText("querying..."); 
      } 

      @Override 
      protected Void doInBackground(Void... params) { 
       readAddresses(); 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void aVoid) { 
       textResult.setText("Done"); 
      } 

      @Override 
      protected void onProgressUpdate(Node... values) { 
       listNote.add(values[0]); 
       ((ArrayAdapter)(listView.getAdapter())).notifyDataSetChanged(); 

      } 

      private void readAddresses() { 

       BufferedReader bufferedReader = null; 

       try { 
        bufferedReader = new BufferedReader(new FileReader("/proc/net/arp")); 

        String line; 
        while ((line = bufferedReader.readLine()) != null) { 
         String[] splitted = line.split(" +"); 
         if (splitted != null && splitted.length >= 4) { 
          String ip = splitted[0]; 
          String mac = splitted[3]; 
          if (mac.matches("..:..:..:..:..:..")) { 
           Node thisNode = new Node(ip, mac); 
           publishProgress(thisNode); 
          } 
         } 
        } 

       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally{ 
        try { 
         bufferedReader.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
    } 
} 

我的代碼activity_scanwifi.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp" 
    android:orientation="vertical" 
    tools:context="com.nliplace.nli.unealta.scanwifi"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Aceasta activitate foloseste un API pentru a identifica dispozitive cunoscute." 
     android:id="@+id/textView11" /> 

    <Button 
     android:id="@+id/readclient" 
     android:layout_width="156dp" 
     android:layout_height="wrap_content" 
     android:textAllCaps="false" 
     android:text="Scaneaza" 
     android:layout_gravity="center_horizontal" /> 

    <TextView 
     android:id="@+id/result" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <ListView 
     android:id="@+id/nodelist" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

我如何重新使用文件/ proc/net/arp?足夠平嗎? –

回答

0

要實際追加到文件/ proc/net/arp中,您需要在網絡上進行ping操作。

選項1: 平-b 192.168.0.255

問題:你沒有得到窗戶divices becouse他們否認廣播平。選項2:(推薦)

用ping命令全部打開。

問題:將追加與所有pinged ip和沒有mac(00:00:00:00:00)fille,你將不得不拒絕所有inalid mac's。