2011-10-24 11 views
11

Tengo un servicio de Android que intenta vincularse a un puerto de socket del servidor 24. Como es un puerto con privilegios, está fallando con una excepción de vinculación. Me pregunto qué debo hacer para que esto funcione. Veo que esto fue preguntado un par de veces en este foro, pero sin una resolución.¿Cómo enlazar a un puerto de menos de 1024 en Android?

Este servicio se ejecuta en un dispositivo que se ejecuta en Android. Construimos la plataforma de Android para el dispositivo. Tenemos todo el control que necesitamos.

+1

Según el conocimiento general de Linux, solo los procesos que se ejecutan como root pueden escuchar en el puerto 24. ¿Puede incluso ejecutar aplicaciones Java como raíz? –

+0

De acuerdo. El proceso debe ejecutarse como root, o quizás como una identificación de usuario con privilegios de administrador (no estoy seguro de si Android admite ese concepto de Linux). Por lo general, si controlas el dispositivo, no estás escribiendo daemons en Java, sino en C/C++, e iniciándolos con el soporte normal de demonios de Linux. – CommonsWare

+1

La forma "su ..." de elevar privilegios no es una opción ya que estoy vinculando a un puerto. No estoy tratando de generar un guión de shell. Como todas las aplicaciones de Android son básicamente un proceso bifurcado de zygote, a menos que zygote eleve los privilegios en función de ALGO, no puedes enlazar. Me pregunto si zygote lo permite o no. Si lo hace, ¿qué es eso ALGO? – videoguy

Respuesta

0

para unirse a un puerto de menos de 1.024, tiene que ser root y hay dos maneras de hacerlo.

  1. aplicación Sistema: La aplicación se debe instalar en/system/app carpeta desde donde se ejecuta como root. Sin embargo, hay algunos problemas de firma para los cuales la ayuda es available. La distribución también es un problema con las aplicaciones del sistema.

  2. su binary: El su binary se puede invocar con un simple exec("su -c [command]"). Pero las cosas son más fáciles de decir que de hacer. Necesita ejecutar un proceso de Android no solo un comando. Por lo tanto, hay libsuperuser que le proporciona los métodos y tiene un doc page de longitud completa.

Cuestiones relacionadas