Запуск Ping через функцию exec в Android

Я пытаюсь запустить двоичный файл netcat для ARM на моем дроиде. Он уже содержится в папке data/local/tmp на устройстве. Команды netcat также работают через оболочку adb.

Однако, когда я пытался выполнять команды из кода, netcat не работал, поэтому я решил начать с базовой команды, такой как ping. Мой код ниже — это попытка пропинговать мой ноутбук с телефона.

Опять же, это работало из оболочки adb, но, похоже, не работает из кода. Я захватил wireshark, и при запуске кода с телефона не пришло ни одного пакета.

Кто-нибудь может сказать мне, почему не работает пинг? Как только я исправлю эту часть, я смогу перейти к другим командам.

Кроме того, я пробовал команду .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();
    }
}
}

person user2484155    schedule 13.06.2013    source источник
comment
Я следил за множеством руководств в Интернете для этого, но это просто не работает для меня. Если у кого-то есть какие-либо предложения, я был бы очень признателен.   -  person user2484155    schedule 15.06.2013


Ответы (1)


Прежде всего, вы имеете в виду /system/bin/ping, а не system/bin/ping. Это, вероятно, объясняет проблему.

Во-вторых, вам необходимо убедиться, что процесс вашего приложения имеет все разрешения, требуемые ping, поскольку эти разрешения наследуются любыми исполняемыми файлами, которые вы запускаете. Таким образом, вам определенно понадобится android.permission.INTERNET, и кажется возможным, что ping могут потребоваться некоторые дополнительные разрешения более низкого уровня для отправки необходимых ICMP-пакетов (я не уверен).

Полезный совет, чтобы убедиться, что ваше приложение имеет правильные разрешения: выполните run-as com.myapplication.packagename.here ping -c 1 192.168.0.13 из оболочки adb. Это запустит команду ping с тем же контекстом безопасности, что и ваше приложение, поэтому вы увидите, есть ли проблемы с разрешениями.

Наконец, обычно не одобряется запуск внешних исполняемых файлов, и теоретически инфраструктура Android оставляет за собой право уничтожать любые такие исполняемые файлы, которые она обнаруживает. На практике сейчас этого не происходит.

person Adrian Taylor    schedule 06.10.2013