Ping de ICMP de Android

¿Hay una manera de hacer ping a un host (Android estándar o mediante la implementación NDK), y obtener información detallada sobre la respuesta? (Tiempo, ttl, paquetes perdidos, etc.) Estaba pensando en alguna aplicación de código abierto que tiene esta función, pero no se puede encontrar …

Gracias

2 Solutions collect form web for “Ping de ICMP de Android”

Afaik, el envío de solicitudes ICMP ECHO necesita raíz (es decir, la aplicación que lo hace tiene que ser setuid) – y que no es posible en "stock" Android (infierno, incluso el método InetAddress # isReachable () en Android es una broma que doesn ' T trabajo según spec).

Un ejemplo muy básico usando / usr / bin / ping & Process – leyendo los resultados del ping, usando un AsyncTask:

public class PingActivity extends Activity { PingTask mTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onResume() { super.onResume(); mTask = new PingTask(); // Ping the host "android.com" mTask.execute("android.com"); } @Override protected void onPause() { super.onPause(); mTask.stop(); } class PingTask extends AsyncTask<String, Void, Void> { PipedOutputStream mPOut; PipedInputStream mPIn; LineNumberReader mReader; Process mProcess; TextView mText = (TextView) findViewById(R.id.text); @Override protected void onPreExecute() { mPOut = new PipedOutputStream(); try { mPIn = new PipedInputStream(mPOut); mReader = new LineNumberReader(new InputStreamReader(mPIn)); } catch (IOException e) { cancel(true); } } public void stop() { Process p = mProcess; if (p != null) { p.destroy(); } cancel(true); } @Override protected Void doInBackground(String... params) { try { mProcess = new ProcessBuilder() .command("/system/bin/ping", params[0]) .redirectErrorStream(true) .start(); try { InputStream in = mProcess.getInputStream(); OutputStream out = mProcess.getOutputStream(); byte[] buffer = new byte[1024]; int count; // in -> buffer -> mPOut -> mReader -> 1 line of ping information to parse while ((count = in.read(buffer)) != -1) { mPOut.write(buffer, 0, count); publishProgress(); } out.close(); in.close(); mPOut.close(); mPIn.close(); } finally { mProcess.destroy(); mProcess = null; } } catch (IOException e) { } return null; } @Override protected void onProgressUpdate(Void... values) { try { // Is a line ready to read from the "ping" command? while (mReader.ready()) { // This just displays the output, you should typically parse it I guess. mText.setText(mReader.readLine()); } } catch (IOException t) { } } } } 

Encontré una manera de ejecutar el comando ping sin root.
Genera un 'sh' proceso primero, y luego ejecuta 'ping' en ese shell, el código:

 p = new ProcessBuilder("sh").redirectErrorStream(true).start(); DataOutputStream os = new DataOutputStream(p.getOutputStream()); os.writeBytes("ping -c 10 " + host + '\n'); os.flush(); // Close the terminal os.writeBytes("exit\n"); os.flush(); // read ping replys BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } 

Funciona bien en mi dispositivo HTC con CyanogenMod 7.1.0 (Android 2.3.7)

  • Envía instantáneamente una señal a un grupo de teléfonos móviles dentro de los 10 m
  • Cómo comprobar mi acceso a internet en mi aplicación android
  • ¿Cómo puedo configurar el cliente Retrofit de Square para manejar una solicitud con un número variable de parámetros
  • Android, NSD / DNS-SD: detección no confiable de NsdManager y resolución de IP
  • Desarrollo de teléfonos Android - Servicios UDP
  • Androide. Aplicación de red para hacer la lista de amigos
  • ¿Cómo deshabilitar / habilitar la red, cambiar a Wifi en el emulador de Android?
  • ¿Cómo hacer que Android Virtual Device acceda a Internet?
  • ¿Cuál es el estado suspendido en la red
  • Java.net.ConnectException: no se pudo conectar con /192.168.253.3 (puerto 2468): connect failed: ECONNREFUSED (Connection refused)
  • ¿Cómo puedo supervisar el estado de la conexión de red en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.