Uso del servidor SMB sin acceso root

18

Estoy buscando una forma de mi HTC Hero (Android 2.1) para poder compartir el contenido de mi tarjeta SD y la memoria del teléfono a través de la red WiFi como un archivo compartido de Windows normal. 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 gratuita.

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

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

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

Día
fuente
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).
Joe Casadonte

Respuestas:

12

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

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

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 son resueltos por LLMNR (Multidifusión local de enlace) Protocolo de 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 no privilegiados (<1024). Es posible utilizar puertos alternativos para SMB, pero Windows está conectado para escuchar los predeterminados. Entonces, supongo que si usa Linux o un cliente SMB separado para Windows que le permite conectarse a un servidor con un número de puerto personalizado, probablemente sea posible. Pero no es realmente una forma directa.

letmaik
fuente
Excelente una respuesta real después de todo este tiempo. Gracias. Ahora, si tan solo pudiera recordar por qué necesitaba esto ...;)
Día
3
Bueno, lo quería porque soy demasiado vago para enchufar el USB para acceder a la tarjeta SD: D
letmaik
Me pregunto si Windows puede hacer frente a \\your.ip:port...
Tobias Kienzler
10

Si bien puede que no sea posible ejecutar un servidor SMB sin root o usar el reenvío de puertos , es posible ejecutar un servidor WebDAV sin root para un efecto similar.

Configurar un servidor Android WebDAV

En mi Nexus 7 de stock, instalé el servidor WebDAV , lo abrí , hice clic en el botón de inicio y pude ver inmediatamente 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 Root (/) o DCIM , así como SdCard como raíz de WebDAV .

Usando el servidor WebDAV a través del Explorador de Windows

Luego lo mapeé http://192.168.x.y:8080como una unidad de red en el Explorador de Windows y pude acceder a los contenidos 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 toma entre 6 y 20 segundos, al igual que el acceso 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, por lo que 700 KB / s).

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

Usando el servidor WebDAV a través de la línea de comando de Windows

Incluso desde la línea de comando, cada listado de directorio tarda 5-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, por lo que alrededor de 2.1 MB / s.

Usar el 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. El cambio de directorio rara vez lleva más de un segundo y la descarga del mismo archivo de 42 MB desde el navegador web tomó alrededor de 12 segundos, por lo que 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 sí lo tiene), entonces puede que no sea obvio si hace clic en un enlace lo llevará a otra página web (para un directorio) o comenzará una descarga (para un archivo).

Advertencias

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

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

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

El problema no es el servidor de samba, sino el hecho de que Windows puede acceder a un recurso compartido de 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 algunos mapas 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 alguna parte (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 este PC virtual, y obtendrá los datos del servidor samba instalado en Android (a través del mapeo de puertos)

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

He probado diferentes servidores de samba, y la única aplicación gratuita que funciona en esta configuración se llama Samba Server

Max
fuente
Propuesta interesante, pero ¿no puedes ingresar algo como \\androids.ip:7777en la barra de direcciones del explorador?
Tobias Kienzler
1
@tobias kienzler Que yo sepa, esto no funcionará
Max
2

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

Bryan Denny
fuente
Yo segundo SwiFTP. No podrá quitar ningún archivo del teléfono usándolo sin ser root, pero debería funcionar bien para la tarjeta SD.
Webs
2

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 root (en un puerto no privilegiado). 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 lo han dicho otros usuarios, Windows usa puertos privilegiados "codificados" para el acceso de SMB. La única forma que encontré para conectarme con Windows es creando un adaptador de red de bucle invertido como se explica aquí (no es el mismo propósito, sino 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 tiene que ingresar su IP a mano y no encontré la forma de descubrirlo (por favor, envíeme una línea, si la conoce).
  • En el mundo 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 de WebDAV y FTP se ignoren (Finder no los monta 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.
artkoenig
fuente
1

Puedo estar malentendidos, 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, utilizaba 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.

Mate
fuente
Hola, gracias por la respuesta, realmente quería un servidor en el teléfono para que mi PC (Ubuntu) pueda insertar 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 con ese requisito, por lo que parece que File Expert hará el trabajo. Estoy instalando ahora informaré de nuevo gracias
Día
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, volveré a intentarlo más tarde ta.
Día
No, funciona ... culpa mía por apresurarme. Eso debería hacer bien el trabajo, gracias.
Día