2016-11-28 5 views
0

私はインターフェイス名なしでpingコマンドを使用する必要があるアンドロイドアプリケーションを開発しています。インタフェースなしの.Pingコマンドはうまくいきますが、インターフェイス名を指定するとpingが動作しません。インターフェイス名(例:wlan0)でAndroidでpingコマンドを実行するにはどうすればよいですか?

私は、コマンドの下にしようとしていることは

pingCommand = "ping -I wlan0 192.168.230.2"; //Does not work 
proc = runtime.exec(pingCommand); 

pingCommand = "ping 192.168.230.2"; //This does work 
proc = runtime.exec(pingCommand); 

この問題のいくつかの解決策を共有してください。

答えて

0

は、次のような、あなたが得るエラーメッセージを投稿することができますUbuntuの上で動作するサンプルコードです:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class RuntimeDemo { 
    public static void main(String args[]) { 
     String s; 
     Process p; 
     try { 
      p = Runtime.getRuntime().exec("ping -I wlan0 192.168.1.119"); 
      BufferedReader br = new BufferedReader(
       new InputStreamReader(p.getInputStream())); 
      while ((s = br.readLine()) != null) 
       System.out.println("line: " + s); 
      p.waitFor(); 
      System.out.println ("exit: " + p.exitValue()); 
      p.destroy(); 
     } catch (Exception e) {} 
    } 
} 
+0

FYI:このPINGコマンドは、プログラムでAndroidで実行しています。 実際にはエラーはありません。間違った引数を与えた場合や、スーパーユーザーモードでしか実行できない引数がある場合などです。 あなたのプログラムがUbuntuで直接実行されるので(ping -I wlan0 192.168.1.119)、それが動作します。 –

+0

エラーを取得するために、私はgetInputStream()の代わりにgetErrorStream()を使用しています。 エラー:ping:SO_BINDTODEVICE:操作が許可されていません Androidでpingを実行するためにインターフェイスを使用するにはroot権限が必要ですが、Linuxではroot権限でこれを実行する必要はありません。 –

0

私は、Androidのインターフェイスを使用してpingを実行に関するいくつかの実験を行なったし、私は結論を下に持っています。

1)特定のインターフェイス(例:wlan0)を使用してPingを実行するには、ROOT権限が必要です。 しかし、1つの指定された電話「HUAWEI NXT-AL 10(Android 6.0)」では、ROOT権限なしでpingにインターフェイス(wlan0)を使用できます。

2)他の携帯電話(Moto G、Micoromax android oneを試してみました)では、ルートが有効になっているとpingが許可されていればインターフェースは許可されません。

関連する問題