Usando servidor SMB sem acesso root

18

Estou procurando um caminho para o meu HTC Hero (Android 2.1) para que eu possa compartilhar o conteúdo do meu cartão SD e memória do telefone pela rede WiFi como um compartilhamento comum de arquivos do Windows. Gostaria de um que não exija que eu torça meu telefone e estou disposto a pagar pelo aplicativo certo para que ele não precise ser gratuito.

Estou pensando em usar o servidor SMB e tudo o que encontrei até agora são:

  1. SambaAndroid que requer acesso root.
  2. androidsmb, que é uma "implementação Java do arquivo de rede SMB / CIFS e servidor de compartilhamento de impressora para dispositivos Android" hospedado no Google Code que não possui documentação e não liberou nenhum arquivo.

É tecnicamente possível desenvolver um servidor SMB no Android que possa ser instalado sem acesso root?

Dia
fonte
Eu usei Wifi Explorer( appbrain.com/app/wifi-file-explorer/… ) algumas vezes e funciona muito bem, sem necessidade de raiz. Porém, não é SMB (e provavelmente também não é FTP).
Joe Casadonte

Respostas:

12

Como sua pergunta original ainda não foi respondida e eu me perguntava o mesmo, aqui está a resposta.

Resposta curta: Não, sem raiz, não é possível executar um servidor SMB usando as portas padrão, para que seja encontrado pelos PCs com Windows.

Resposta longa: O SMB é executado nas portas 137-139 (UDP e TCP) usando NetBIOS ou em sistemas mais recentes (a partir do Windows Vista) diretamente na porta TCP 445, onde neste último caso os nomes de computadores são resolvidos pelo LLMNR (Multicast local-link) Protocolo de resolução de nomes) que é executado na porta UDP 5355. Por que isso é importante? Os aplicativos que não estão executando como raiz não podem se vincular a portas não privilegiadas (<1024). É possível usar portas alternativas para SMB, mas o Windows é conectado apenas para ouvir as portas padrão. Então, eu acho que se você usa Linux ou um cliente SMB separado para Windows, o que permite conectar-se a um servidor com um número de porta personalizado, provavelmente é possível. Mas não é realmente uma maneira direta.

letmaik
fonte
Ótima resposta real depois de todo esse tempo. Obrigado. Agora, se eu pudesse lembrar por que eu precisava disso ...;)
Dia
3
Bem, eu queria isso porque eu sou muito preguiçoso para ligar o USB para acessar o cartão SD: D
letmaik
Pergunto-me se o Windows pode lidar com \\your.ip:port...
Tobias KIENZLER
10

Embora não seja possível executar um servidor SMB sem raiz ou usando o encaminhamento de porta , é possível executar um servidor WebDAV sem raiz para um efeito semelhante.

Configurando um servidor Android WebDAV

No meu Nexus 7, instalei o WebDAV Server , o abri, cliquei no botão Iniciar e pude ver imediatamente minha /storage/sdcardpasta no meu navegador na URL exibida pelo aplicativo, ou seja,http://192.168.x.y:8080

Observe que, com o WebDAV, você também tem a opção de selecionar Raiz (/) ou DCIM , além de SdCard como raiz do WebDAV .

Usando o servidor WebDAV através do Windows Explorer

Mapeei http://192.168.x.y:8080como uma unidade de rede no Windows Explorer e consegui acessar o conteúdo da minha unidade de armazenamento, como se estivesse conectado via MTP, mas através de uma letra de unidade.

Infelizmente, esta solução é incrivelmente lenta.

Toda mudança de diretório leva entre 6 e 20 segundos, assim como o acesso à maioria dos arquivos. Porém, quando um arquivo é acessado, ele é transferido a uma velocidade razoável (a cópia de um único arquivo de 42 MB no Windows Explorer levou cerca de 60 segundos, ou seja, 700 KB / s).

Portanto, o WebDAV via Windows Explorer é adequado para baixar alguns arquivos grandes cuja localização você conhece, mas navegar ou sincronizar um dispositivo inteiro dessa maneira não é rápido. Sincronizei 1,75 GB de dados em cerca de 6000 arquivos e 400 diretórios e levou 10 horas, ou seja, cerca de 50 KB / s ou 10 arquivos / diretórios por minuto, em média.

Usando o servidor WebDAV através da linha de comando do Windows

Mesmo na linha de comando, cada listagem de diretório leva de 5 a 6 segundos, assim como qualquer acesso a arquivos. A cópia do mesmo arquivo de 42 MB da linha de comando levou cerca de 20 segundos, aproximadamente 2,1 MB / s.

Usando o servidor WebDAV através de um navegador da web

A opção mais rápida para o WebDAV é usar o seu navegador da web, diretamente através do URL fornecido. A mudança de diretório raramente leva mais de um segundo e o download do mesmo arquivo de 42 MB do navegador leva cerca de 12 segundos, aproximadamente 3,6 MB / s.

A desvantagem de usar o navegador da web é que ele mostra apenas a data (sem tamanho ou tipo) e não faz distinção entre arquivos e diretórios; portanto, se um arquivo não possui uma extensão (ou um diretório), pode não ser óbvio se clicar em um link o levará para outra página da web (para um diretório) ou iniciará um download (para um arquivo).

Ressalvas

  • Por padrão, o Windows limita o tamanho dos downloads do WebDAV a 50000000 bytes (47,6MB), embora isso possa ser alterado através de uma invasão de registro ( FileSizeLimitInBytesin HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters) se você souber o que está fazendo.

  • O acesso ao WebDAV não é seguro . Mesmo se você definir uma senha no compartilhamento WebDAV, a conexão ainda httpnão é https, portanto não é criptografada. Use o WebDAV apenas em uma rede wifi segura e, certamente, não ative o servidor WebDAV enquanto estiver em um cibercafé ou outro wifi sem segurança.

Mark Booth
fonte
Este método é muito rápido no meu dispositivo. Obrigado!
Cluster
Testado no Samsung S10 + Windows 8.0. Funciona bem.
Brethlosze
5

O problema não é o servidor samba, mas o fato de o Windows poder acessar um compartilhamento samba apenas na porta 445 e, em um android sem raiz, um aplicativo normal não pode escutar na porta 445.

Mas você pode superar isso com alguns mapeamentos de portas TCP:

  1. Instale um servidor samba no seu Android e faça-o ouvir em uma porta como 7777
  2. Instale um software de encaminhamento de porta TCP em algum lugar (eu o instalei em um PC virtual)
  3. Configure o software de mapeamento de porta para escutar conexões na porta 445 e encaminhe as conexões para o seu Android na porta 7777
  4. Agora você pode acessar a pasta compartilhada neste PC virtual e obter os dados do servidor samba instalado no Android (através do mapeamento de portas)

Descrevi todas as etapas em detalhes aqui no meu blog http://techforpassion.blogspot.it/2013/12/android-how-to-share-folder-over-wifi.html

Eu tentei um servidor samba diferente, e o único aplicativo gratuito que funciona nessa configuração é chamado Samba Server

Máx.
fonte
Proposta interessante, mas você não pode inserir algo como \\androids.ip:7777na barra de endereços do explorer?
Tobias Kienzler 15/01
11
@tobias KIENZLER a meu conhecimento, isso não vai funcionar
Max
2

Como alternativa, você pode executar um servidor ftp no telefone para obter acesso ao conteúdo do cartão SD. Confira o SwiFTP .

Bryan Denny
fonte
Eu segundo SwiFTP. Você não poderá tirar nenhum arquivo do telefone sem usá-lo como root, mas deve funcionar bem no cartão SD.
Webs
2

No momento, terminei um aplicativo ( para dispositivos não raiz ) para compartilhar arquivos na rede local. Minhas lições aprendidas:

  • É possível executar um servidor SMB no Android sem acesso root (na porta não privilegiada). O Mac OS X se conecta a ele sem problemas (se você transmitir seu ip e porta via Bonjour). Mas o Windows não. Como já foi dito por outros usuários, o Windows usa portas privilegiadas "codificadas" para acesso às SMB. A única maneira que encontrei para conectar-me ao Windows é criar um adaptador de rede de loopback, conforme explicado aqui (não com a mesma finalidade, mas com a idéia). Finalmente, acho que a maneira mais amigável é usar o WebDAV no Windows . Mesmo que o Windows não seja fácil de usar, porque você precisa digitar seu ip manualmente e eu não encontrei uma maneira de descobri-lo (por favor, escreva-me uma linha, se você souber uma).
  • No mundo do Mac OS X, o protocolo SMB é um vencedor claro . Sua participação será descoberta automaticamente por Bonjour e aparecerá magicamente no Finder. É estranho que os compartilhamentos WebDAV e FTP sejam ignorados (não montados automaticamente pelo Finder), embora sejam suportados pelo Bonjour. Clientes de terceiros (por exemplo, Cyberduck) não têm problemas com a descoberta automática desses compartilhamentos.
artkoenig
fonte
1

Posso estar entendendo mal, mas parece que você precisa de um cliente SMB, não de um servidor. Além disso, você não precisa de acesso root. Para usar o SMB para transferir arquivos para o seu computador, você pode usar o Gerenciador de Arquivos ASTRO com o complemento SMB , ou existe o File Expert, que também é gratuito.

Você também pode usar o WebDAV em vez do SMB com um aplicativo como o WebSharing .

No passado, usei um aplicativo que, com o software cliente no meu computador, me permitia transferir arquivos pelo explorador de arquivos de qualquer lugar pela web. Não era um aplicativo VNC completo. Eu adquiri um telefone novo e agora não consigo encontrar o aplicativo.

Matt
fonte
Oi, obrigado pela resposta, eu realmente queria um servidor no telefone para que meu PC (Ubuntu) possa enviar novos arquivos para ele quando chegar em casa sem que eu precise tirar o telefone do bolso. Prefira não exigir software adicional no PC, mas é claro que um servidor FTP ou WebDAV no telefone também atenderia a esse requisito; portanto, parece que o File Expert fará o trabalho. Estou instalando agora irá relatar obrigado
Dia
Hmmm, o servidor FTP parece não funcionar - o assistente "Connect to Server" do Ubuntu diz "fim inesperado do fluxo". Tem que ir trabalhar, tentarei novamente mais tarde ta.
Dia
Não, ele funciona ... minha culpa por me apressar. Isso deve fazer o trabalho muito bem, obrigado.
Dia