Uso del servidor SMB sin acceso de root

Estoy buscando una manera para que mi HTC Hero (Android 2.1) pueda compartir el contenido de mi tarjeta SD y la memoria del teléfono a través de la red WiFi como un recurso compartido de archivos normal de Windows. Me gustaría uno que no requiera que rootee mi teléfono y estoy dispuesto a pagar por la aplicación correcta para que no tenga que ser gratis.

Estoy pensando en usar el servidor SMB y todo lo que he encontrado hasta ahora es:

  1. SambaAndroid que requiere acceso de root.
  2. androidsmb , ​​que es una "implementación de Java del servidor compartido de impresoras y archivos de red SMB/CIFS para dispositivos Android" alojada en Google Code que no tiene documentación y no ha publicado ningún archivo.

¿Es incluso técnicamente posible desarrollar un servidor SMB en Android que pueda instalarse sin acceso de root?

He usado Wifi Explorer( appbrain.com/app/wifi-file-explorer/… ) varias veces y funciona muy bien, no se requiere root. Sin embargo, no es SMB (y probablemente tampoco sea FTP).

Respuestas (6)

Como su pregunta original aún no ha sido respondida y yo me preguntaba lo mismo, aquí está la respuesta.

Respuesta corta: No, sin root no es posible ejecutar un servidor SMB usando los puertos predeterminados para que las PC con Windows lo encuentren.

Respuesta larga: SMB se ejecuta en los puertos 137-139 (UDP y TCP) usando NetBIOS o en sistemas más nuevos (desde Windows Vista en adelante) directamente en el puerto TCP 445 donde, en el último caso, los nombres de las computadoras se resuelven mediante LLMNR (Link-local Multicast). Resolución de nombres) que se ejecuta en el puerto UDP 5355. ¿Por qué es importante? Las aplicaciones que no se ejecutan como root no pueden vincularse a puertos sin privilegios (<1024). Es posible usar puertos alternativos para SMB, pero Windows está programado para escuchar solo los predeterminados. Entonces, supongo que si usa Linux o un cliente SMB separado para Windows que permite conectarse a un servidor con un número de puerto personalizado, probablemente sea posible. Pero en realidad no es una forma directa.

Gran respuesta real después de todo este tiempo. Gracias. Ahora, si tan solo pudiera recordar por qué necesitaba esto...;)
Bueno, lo quería porque me da pereza enchufar el USB para acceder a la tarjeta SD :D
Me pregunto si Windows puede hacer frente a \\your.ip:port...

Si bien es posible que no sea posible ejecutar un servidor SMB sin raíz o mediante el reenvío de puertos , es posible ejecutar un servidor WebDAV sin raíz para obtener un efecto similar.

Configuración de un servidor WebDAV de Android

En mi Nexus 7 original, instalé WebDAV Server , lo abrí, hice clic en el botón de inicio e inmediatamente pude ver mi /storage/sdcardcarpeta en mi navegador web en la URL que muestra la aplicación, es decirhttp://192.168.x.y:8080

Tenga en cuenta que con WebDAV, también tiene la opción de seleccionar Raíz (/) o DCIM , así como SdCard como raíz de WebDAV .

Uso del servidor WebDAV a través del Explorador de Windows

Luego asigné http://192.168.x.y:8080como una unidad de red en el Explorador de Windows y pude acceder al contenido de mi unidad de almacenamiento, como si estuviera conectado a través de MTP, pero a través de una letra de unidad.

Lamentablemente, esta solución es increíblemente lenta.

Cada cambio de directorio tarda entre 6 y 20 segundos, al igual que acceder a la mayoría de los archivos. Sin embargo, una vez que se accede a un archivo, se transfiere a una velocidad razonable (copiar un solo archivo de 42 MB en el Explorador de Windows tomó alrededor de 60 segundos, es decir, 700 KB/s).

Por lo tanto, WebDAV a través del Explorador de Windows está bien para descargar algunos archivos grandes cuya ubicación conoce, pero navegar o sincronizar un dispositivo completo de esta manera no es rápido. Sincronicé 1,75 GB de datos en alrededor de 6000 archivos y 400 directorios y tardé 10 horas, es decir, alrededor de 50 KB/so 10 archivos/directorios por minuto en promedio.

Uso del servidor WebDAV a través de la línea de comandos de Windows

Incluso desde la línea de comandos, cada listado de directorio toma de 5 a 6 segundos, al igual que cualquier acceso a archivos. Copiar el mismo archivo de 42 MB desde la línea de comandos tomó alrededor de 20 segundos, es decir, alrededor de 2,1 MB/s.

Uso del servidor WebDAV a través de un navegador web

Sin embargo, la opción más rápida para WebDAV es usar su navegador web, directamente a través de la URL proporcionada. Cambiar de directorio rara vez toma más de un segundo y descargar el mismo archivo de 42 MB desde el navegador web tomó alrededor de 12 segundos, es decir, alrededor de 3,6 MB/s.

La desventaja de usar el navegador web es que solo muestra la fecha (sin tamaño ni tipo) y no hace distinción entre archivos y directorios, por lo que si un archivo no tiene una extensión (o un directorio la tiene), puede que no sea obvio. si hacer clic en un enlace lo llevará a otra página web (para un directorio) o iniciará una descarga (para un archivo).

Advertencias

  • De forma predeterminada, Windows limita el tamaño de las descargas de WebDAV a 50000000 bytes (47,6 MB), aunque esto se puede cambiar a través de un truco de registro ( FileSizeLimitInBytesen HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters) si sabe lo que está haciendo.

  • El acceso WebDAV no es seguro . Incluso si establece una contraseña en el recurso compartido WebDAV, la conexión aún httpno es válida https, por lo que no está encriptada. Solo use WebDAV en una red wifi segura y ciertamente no habilite el servidor WebDAV mientras se encuentra en un cibercafé u otro wifi no seguro.

Este método es bastante rápido en mi dispositivo. ¡Gracias!
Probado en Samsung S10 + Windows 8.0. Funciona bien.

El problema no es el servidor samba, sino el hecho de que Windows puede acceder a un recurso compartido samba solo en el puerto 445, y en un Android no rooteado, una aplicación normal no puede escuchar en el puerto 445.

Pero puede superar esto con algún mapeo de puertos TCP:

  1. Instale un servidor samba en su Android y haga que escuche en un puerto como 7777
  2. Instale un software de reenvío de puertos TCP en algún lugar (lo instalé en una PC virtual)
  3. Configure el software de mapeo de puertos para escuchar las conexiones en el puerto 445 y reenvíe las conexiones a su Android en el puerto 7777
  4. Ahora puede acceder a la carpeta compartida en esta PC virtual y obtendrá los datos del servidor samba instalado en Android (a través de la asignación de puertos)

He descrito todos los pasos en detalle aquí en mi blog http://techforpassion.blogspot.it/2013/12/android-how-to-share-folder-over-wifi.html

Probé diferentes servidores samba, y la única aplicación gratuita que funciona en esta configuración se llama Servidor Samba

Interesante propuesta, pero ¿no puedes ingresar algo como \\androids.ip:7777en la barra de direcciones del explorador?
@tobias kienzler Que yo sepa, esto no funcionará

Actualmente terminé una aplicación ( para dispositivos no rooteados ) para compartir archivos en la red local. Mis lecciones aprendidas:

  • Es posible ejecutar un servidor SMB en Android sin acceso de root (en un puerto sin privilegios). Mac OS X se conecta a él sin ningún problema (si transmite su ip y puerto a través de Bonjour). Pero Windows no. Como ya dijeron otros usuarios, Windows usa puertos privilegiados "codificados" para el acceso SMB. La única forma que encontré para conectarme con Windows es crear un adaptador de red de bucle invertido como se explica aquí (no es el mismo propósito, pero sí la idea). Finalmente, creo que la forma más fácil de usar es usar WebDAV en Windows . Incluso si Windows no lo hace fácil de usar, porque tienes que ingresar tu ip a mano y no encontré una forma de descubrirla (por favor, escríbeme, si conoces una).
  • En el mundo de Mac OS X, el protocolo SMB es un claro ganador . Bonjour descubrirá automáticamente su parte y aparecerá mágicamente en Finder. Es extraño que los recursos compartidos WebDAV y FTP se ignoren (Finder no los monte automáticamente), aunque Bonjour los admite . Los clientes de terceros (por ejemplo, Cyberduck) no tienen problemas con el descubrimiento automático de estos recursos compartidos.

Alternativamente, puede ejecutar un servidor ftp en su teléfono para obtener acceso al contenido de su tarjeta SD. Echa un vistazo a SwiFTP .

Segundo SwiFTP. No podrá sacar ningún archivo del teléfono usándolo sin ser root, pero debería funcionar bien para la tarjeta SD.

Puede que no lo entienda bien, pero parece que necesita un cliente SMB, no un servidor. Además, no necesita acceso de root. Para usar SMB para transferir archivos a su computadora, puede usar ASTRO File Manager con el complemento SMB , o existe File Expert , que también es gratuito.

También puede usar WebDAV en lugar de SMB con una aplicación como WebSharing .

En el pasado, usaba una aplicación que con el software del cliente en mi computadora me permitía transferir archivos a través del explorador de archivos desde cualquier lugar a través de la web. No era una aplicación VNC completa. Tengo un teléfono nuevo y ahora, por mi vida, no puedo encontrar la aplicación.

Hola, gracias por la respuesta, realmente quería un servidor en el teléfono para que mi PC (Ubuntu) pueda enviar nuevos archivos cuando llegue a casa sin tener que sacar el teléfono de mi bolsillo. Prefiere no requerir software adicional en la PC, pero, por supuesto, un servidor FTP o WebDAV en el teléfono también cumpliría ese requisito, por lo que parece que File Expert hará el trabajo. Estoy instalando ahora informaré gracias
Hmmm, el servidor FTP no parece funcionar: el asistente "Conectar al servidor" de Ubuntu dice "final inesperado de la transmisión". Tengo que ir a trabajar, lo intentaré más tarde.
No, funciona... mi culpa por apresurarme. Eso debería hacer el trabajo muy bien gracias.