【问题标题】:Running Ping through exec function in Android在 Android 中通过 exec 函数运行 Ping
【发布时间】:2013-06-13 23:14:50
【问题描述】:

我正在尝试在我的机器人上运行 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();
    }
}
}

【问题讨论】:

  • 我已经在网上关注了很多教程,但它似乎对我不起作用。如果有人有任何建议,我将非常感激。

标签: java android ping netcat


【解决方案1】:

首先,您的意思是/system/bin/ping 不是system/bin/ping。这可能是问题的原因。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多