2017-04-04 22 views
0

我有一個方法,使用android shell命令獲取子網掩碼。我測試了adb和作品;不過,我只是把它放在一個方法中,我可以在android監視器控制檯上顯示輸出結果。如果有更簡單的方法,請告知。謝謝。順便說一句,我的主要活動線程中運行這個(沒有的AsyncTask)爲什麼這種方法是不給我在Android的子網掩碼

/* 
    * method to return private subnet mask 
    */ 
    public String getPrivateSubnet() { 

     String output = ""; 
     final String SUBNET_CMD = "/system/bin/ifconfig wlan0 | find \"Mask\""; 
     try { 
      Process p = Runtime.getRuntime().exec(SUBNET_CMD); 
//   p.wait(); 
      Log.v("SUBNET OUTPUT", p.toString()); 
      BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) { 
       Log.v("SUBNET", inputLine); 
      } 
      in.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     Log.v("SUBNET", output); 
     return output; 
    } 

回答

0

如果你想用ifconfig使用:

ifconfig wlan0 | awk '/netmask/{print $4}' 

編輯:我做了我自己的一些非常快速編碼找到這個。是的,Java API允許您使用NetworkInterface類獲取接口的ipv4子網掩碼。我做了一段可能對你有幫助的代碼。此代碼爲您提供每個接口的CIDR值(例如:24將是255.255.255.0)。查看更多關於此這裏:https://en.wikipedia.org/wiki/IPv4_subnetting_reference

import java.net.*; 
import java.util.Enumeration; 

public class Main { 

     public static void main(String[] args) throws UnknownHostException, SocketException { 

      Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); 

      while (networkInterfaces.hasMoreElements()) { 
       NetworkInterface networkInterface = networkInterfaces.nextElement(); 
       try { 
        for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) { 
         System.out.println(address.getNetworkPrefixLength()); 
        } 
       } catch (NullPointerException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
+0

我搜索過其他的方法,但它是如此繁瑣獲得的IPv4子網掩碼。 ipv6我可以使用NetworInterface類,但它不會給我ipv4。這就是爲什麼我使用這種方法 – miatech

+0

這種使用ipconfig的方法wlan在Android手機中並不可靠。輸出因手機而異。有沒有辦法使用java api獲取ipv4的子網掩碼 – miatech

+0

@miatech請參閱編輯我的答案。 –

相關問題