2017-04-04 10 views
0

私はアンドロイドシェルコマンドを使用してサブネットマスクを取得する方法があります。私はadbと作品についてテストしました。しかし、私はそれをメソッドに入れて、アンドロイドモニターコンソールに出力を表示させることができます。簡単な方法があれば助言してください。ありがとう。使用したい場合は、私がメインの活動スレッド(なしAsynctask)でこれを実行している途中なぜこのメソッドは私にアンドロイドのサブネットマスクを与えていない

/* 
    * 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はアンドロイド携帯電話で信頼性が高くありません。出力は電話によって異なります。 Java apiを使用してipv4のサブネットマスクを取得する方法があります – miatech

+0

@miatech私の答えに編集を参照してください。 –

関連する問題