2016-03-29 16 views
0

ich eine „einfache“ App erstellen möchten, die alle IP-Adressen in einem bestimmten Netz finden ..Wie scannen IP in Android

Zum Beispiel ...

ich einen Knopf haben, dass, wenn darauf geklickt , finde alle IP-Adressen und zeige sie in einem ListView an.

Hat jemand einen Beispiel- oder Funktionsquellcode, den ich erklären kann?

Sorry für mein Englisch =)

+0

folgende URL kann Ihnen helfen http://stackoverflow.com/questions/3345857/how-to-get-a-list-of-ip-connected-in-same-network-subnet-using-java –

Antwort

0

Sie einige wie diese versuchen:

public class MainActivity extends Activity { 

     WifiManager wifi; 
     String wifis[]; 
     WifiScanReceiver wifiReciever; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE); 
      wifiReciever = new WifiScanReceiver(); 
      wifi.startScan(); 
     } 



     protected void onResume() { 
      registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
      super.onResume(); 
     } 



     private class WifiScanReceiver extends BroadcastReceiver{ 
      public void onReceive(Context c, Intent intent) { 
      List<ScanResult> wifiScanList = wifi.getScanResults(); 
      wifis = new String[wifiScanList.size()]; 

      for(int i = 0; i < wifiScanList.size(); i++){ 
       wifis[i] = ((wifiScanList.get(i)).toString()); 
      } 
      //here you can set your list view with wifis 
      } 
     } 
    } 
2

Dies ist mein Code IP-Adressen im lokalen Netzwerk für die Suche. Zuerst müssen Sie die IP-Adresse Ihres Geräts finden und dann jede IP-Adresse mit der IP-Adresse subnet pingen. Angenommen, die IP-Adresse des Geräts lautet 192.168.0.100, dann ist subnet192.168.0.. und dann ping jede IP-Adressen 192.168.0.1-192.168.0.255 für IP-Adresse des Geräts finden Sie zwei Verfahren verwenden: 1 Methode:

String ip = ""; 
     Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface.getNetworkInterfaces(); 

      while(enumNetworkInterfaces.hasMoreElements()) 
      { 
      NetworkInterface networkInterface = enumNetworkInterfaces.nextElement(); 
    Enumeration<InetAddress> enumInetAddress = networkInterface.getInetAddresses(); 

     while(enumInetAddress.hasMoreElements()) 
      { 
      InetAddress inetAddress = enumInetAddress.nextElement(); 
    String ipAddress = ""; 
    if(inetAddress.isSiteLocalAddress()) 
      { 
       ipAddress = "SiteLocalAddress: "; 
    } 
    ip += ipAddress + inetAddress.getHostAddress() + "\n"; 
String subnet = getSubnetAddress(ip); 

private String getSubnetAddress(int address) 
    { 
     String ipString = String.format(
        "%d.%d.%d", 
        (address & 0xff), 
        (address >> 8 & 0xff), 
        (address >> 16 & 0xff)); 

        return ipString; 
    } 

2 Methode:

WifiManager mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiInfo mWifiInfo = mWifiManager.getConnectionInfo(); 
String subnet = getSubnetAddress(mWifiManager.getDhcpInfo().gateway); 

Nach Subnetz-Adresse zu finden, ping jeder IP-Adressen im Netzwerk:

Nach dem Ping jedes IP-Adressen dann Android Kernel-Datei gespeichert diese IP-Adresse w ho sind in Netzwerken. Sie können diese Liste abrufen, indem Sie die AndroidOS-Datei aufrufen. Diese Datei ist arp, die in /proc/net/ in Android gespeichert ist. Sie können durch den Code gelangen. Führen Sie einfach bestimmten Befehl programmatisch und in Ihrem modelData gespeichert dann Listview Durch Adapter mitteilen:

ArrayList<IpAddress> mIpAddressesList; 
    private boolean getIpFromArpCache() 
     { 
      BufferedReader br = null; 
      char buffer[] = new char[65000]; 
      String currentLine; 
      try 
      { 
       br = new BufferedReader(new FileReader("/proc/net/arp")); 

       while ((currentLine = br.readLine()) != null) 
       { 
        Log.d(TAG, "getIpFromArpCache() :: "+ currentLine); 

        String[] splitted = currentLine.split(" +"); 
        if (splitted != null && splitted.length >= 4) 
        { 
         String ip = splitted[0]; 
         String mac = splitted[3]; 
         if (!splitted[3].equals(emptyMac)) 
         { 
          if (!splitted[0].equals(IP)) 
          { 
    //       int remove = mac.lastIndexOf(':'); 
    //       mac = mac.substring(0,remove) + mac.substring(remove+1); 
           mac = mac.replace(":", ""); 
           Log.i(TAG, "getIpFromArpCache() :: ip : "+ip+" mac : "+mac); 
           mIpAddressesList.add(new IpAddress(ip, mac)); 
          } 
         } 
        } 

       } 

       return true; 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      { 
       try 
       { 
        br.close(); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      return false; 
     } 



public class IpAddress 
{ 
    private String ipAddressName; 
    private String macAddress; 


    public IpAddress(String ipAddressName, String macAddress) 
    { 
     setIpAddressName(ipAddressName); 
     setMacAddress(macAddress); 
    } 

    public void setIpAddressName(String ipAddressName) 
    { 
     this.ipAddressName = ipAddressName; 
    } 

    public String getIpAddressName() 
    { 
     return this.ipAddressName; 
    } 


    public void setMacAddress(String macAddress) 
    { 
     this.macAddress = macAddress; 
    } 


    public String getMacAddress() 
    { 
     return this.macAddress; 
    } 
} 

Aber für diese Vernetzung Betrieb auf Hauptthread Durchführung nicht gut ist. Sie müssen den gesamten Code auf Thread schieben. und führe alle netzwerkbezogenen isses im Hintergrundthread aus. Hoffe es hilft dir. lassen Sie mich wissen, ob es funktioniert oder nicht. Wenn Sie brauchen, würde ich gerne .apk dieser Demo teilen.

+0

Sie kann die apk-Datei oder das Projekt haben? wenn nicht ärgert. Ich habe die Dinge nicht verstanden –

+0

Ich habe sowohl Demo-Projekt und APK-Datei auch. aber was hast du nicht verstanden? –

+0

Sie bitte lassen Sie mich apk und Projekt weitergeben? Ich würde besser verstehen .. es ist kein Problem .. Was ich nicht verstehe, ist, wie alle IP-Adressen in einer Listenansicht –