在Android中运行Ping通过exec功能

时间:2013-06-13 23:14:51

标签: java android ping netcat

我试图在我的机器人上运行netcat的ARM二进制文件。它已经包含在设备上的data / local / tmp文件夹中。 netcat命令也可以通过adb shell工作。

但是,我试图从代码执行命令,netcat没有工作,所以我决定从像ping这样的基本命令开始。我下面的代码试图通过手机ping我的笔记本电脑。

这再次起作用于adb shell但似乎无法从代码中运行。我在wireshark中捕获了代码运行时没有来自手机的数据包。

任何人都可以告诉我为什么ping不起作用?一旦我修复了那部分,我就可以转到其他命令了。

另外,我已经尝试过.waitFor命令等待命令运行,但这会在eclipse中出错。

谢谢

package com.maurice.netcat;

import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class NetcatActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView text = new TextView(this);
    text.setText("Netcat");
    setContentView(text);

    try
    {
        String ping = "system/bin/ping -c 1 192.168.0.13";
        Runtime.getRuntime().exec(ping);
        Toast.makeText(getApplicationContext(), "In Netcat Section", Toast.LENGTH_SHORT).show();


    }


    catch(IOException e) {
        System.out.println("Error Executing Netcat");
        Toast.makeText(getApplicationContext(), "In Exception Section", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}
}

1 个答案:

答案 0 :(得分:1)

首先,您的意思是/system/bin/ping而不是system/bin/ping。这可能是问题所在。

其次,您需要确保您的应用程序进程具有ping所需的所有权限,因为您启动的任何可执行文件都会继承这些权限。因此,您肯定需要android.permission.INTERNETping可能需要一些额外的低级权限才能发送所需的ICMP数据包(我不确定)。

确保您的应用程序具有正确权限的有用提示:从run-as com.myapplication.packagename.here ping -c 1 192.168.0.13 shell执行adb。这将运行ping命令,其安全上下文与您的应用程序相同,因此您将看到是否存在权限问题。

最后,它通常不赞成启动外部可执行文件,理论上Android框架保留消除它发现的任何此类可执行文件的权利。在实践中,它现在不会这样做。