使用没有root访问权限的SMB服务器


18

我正在寻找一种HTC Hero(Android 2.1)的方式,以便可以像常规Windows文件共享一样通过WiFi网络共享SD卡和手机内存中的内容。我想要一个不需要我扎根手机的人,并且愿意为正确的应用付费,因此它不必免费。

我正在考虑使用SMB服务器,到目前为止,我发现的全部是:

  1. SambaAndroid,需要root访问。
  2. androidsmb是Google Code上托管的“用于Android设备的SMB / CIFS网络文件和打印机共享服务器的Java实现”,没有文档,也没有发布任何文件。

从技术上讲,甚至可以在Android上开发无需root访问权限即可安装的SMB服务器吗?


我已经使用了Wifi Explorerappbrain.com/app/wifi-file-explorer/…)几次,而且效果很好,不需要root用户。但是,它不是SMB(也可能不是FTP)。
Joe Casadonte 2010年

Answers:


12

由于您的原始问题仍然没有得到答案,我想知道还是一样,这就是答案。

简短的答案:不,没有root用户,就不可能使用默认端口运行SMB服务器,以便Windows PC可以找到它。

长答案:SMB可以使用NetBIOS在137-139端口(UDP和TCP)上运行,也可以直接在TCP端口445上的较新系统(从Windows Vista开始)上运行,在后一种情况下,计算机名称由LLMNR解析(链接本地多播)名称解析)协议,该协议运行在UDP端口5355上。为什么这很重要?未以root 用户身份运行的应用程序无法绑定到非特权端口(<1024)。可以为SMB使用备用端口,但是Windows硬连线只能监听默认端口。因此,我想如果您使用Linux或Windows的单独SMB客户端,则可以使用自定义端口号连接服务器。但这并不是直接的方法。


一直以来,这都是一个很好的答案。谢谢。现在,只要我能记得为什么我需

3
好吧,我想要它,因为我太懒了,无法插入USB来访问SD卡:D
letmaik 2012年

我想知道Windows是否可以应对\\your.ip:port...
Tobias Kienzler 2015年

10

虽然可能无法在没有root用户的情况下运行SMB服务器使用端口转发,但也可以在没有root用户的情况下运行WebDAV服务器,从而达到类似的效果。

设置Android WebDAV服务器

在我的库存Nexus 7上,我安装了WebDAV Server,将其打开,单击“开始”按钮,然后立即可以/storage/sdcard在Web浏览器中的应用程序显示的URL上看到我的文件夹,即http://192.168.x.y:8080

请注意,对于WebDAV,您还可以选择选择根(/)DCIM以及SdCard作为WebDAV 根目录

通过Windows资源管理器使用WebDAV服务器

然后http://192.168.x.y:8080,我在Windows资源管理器中将其映射为网络驱动器,并且可以访问存储驱动器的内容,就像通过MTP(但通过驱动器号)进行连接一样。

可悲的是,此解决方案的速度非常慢。

每次目录更改都需要6到20秒,访问大多数文件也一样。但是,一旦访问了文件,它就会以合理的速度传输(在Windows资源管理器中复制单个42MB文件大约需要60秒,因此为700KB / s)。

因此,通过Windows Explorer的WebDAV可以下载一些您知道位置的大文件,但是用这种方式浏览或同步整个设备并不快。我在大约6000个文件和400个目录中同步了1.75GB的数据,这花费了10个小时,即平均每分钟大约50KB / s或10个文件/目录。

通过Windows命令行使用WebDAV服务器

即使从命令行,每个目录列表也需要5到6秒钟,任何文件访问也是如此。从命令行复制相同的42MB文件大约需要20秒钟,因此速度约为2.1MB / s。

通过Web浏览器使用WebDAV服务器

WebDAV最快的选择是直接通过给定的URL使用Web浏览器。更改目录很少需要超过一秒钟的时间,而从Web浏览器下载相同的42MB文件大约需要12秒钟,因此约为3.6MB / s。

使用网络浏览器的缺点是,它仅显示日期(没有大小或类型),并且在文件和目录之间没有区别,因此,如果文件没有扩展名(或目录没有扩展名),则可能不明显如果单击链接将带您到另一个网页(对于目录)或开始下载(对于文件)。

注意事项

  • 默认情况下Windows WebDAV的限制将下载到50000000个字节(47.6MB)的大小,虽然这可以通过注册表黑客改变FileSizeLimitInBytesHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters)如果你知道你在做什么。

  • WebDAV访问不安全。即使您在WebDAV共享上设置了密码,该连接仍然http不是https,因此未加密。仅在安全的wifi网络上使用WebDAV,并且当您在网吧或其他不安全的wifi中时,一定不要启用WebDAV服务器。


此方法在我的设备上非常快。谢谢!
集群

在Samsung S10 + Windows 8.0上测试。工作良好。
6

5

问题不在于samba服务器,而是Windows只能在端口445上访问samba共享的事实,而在非root用户的android上,普通的应用程序无法在端口445上进行侦听。

但是您可以通过一些TCP端口映射来克服此问题:

  1. 在您的android上安装一个samba服务器,并使其在7777等端口上进行监听
  2. 将TCP端口转发软件安装在某处(我将其安装在virtualPC上)
  3. 设置端口映射软件以侦听端口445上的连接,并将连接转发到端口7777上的android
  4. 现在,您可以访问此virtualPC上的共享文件夹,并且将从安装在android上的samba服务器中获取数据(通过端口映射)

我已经在我的博客http://techforpassion.blogspot.it/2013/12/android-how-to-share-folder-over-wifi.html上详细介绍了所有步骤。

我尝试了不同的samba服务器,并且在此配置下可用的唯一免费应用程序称为Samba服务器


有趣的建议,但是您不能\\androids.ip:7777在浏览器地址栏中输入类似的内容吗?
Tobias Kienzler

1
@tobias kienzler据我所知,这是不行的
最大

2

或者,您可以在手机上运行ftp服务器以访问SD卡的内容。查看SwiFTP


我第二个SwiFTP。没有root用户,您将无法使用手机从手机上删除任何文件,但是对于SD卡来说,它应该可以正常工作。
腹板

2

我目前完成了一个用于非根设备应用程序用于在本地网络中共享文件。我的经验教训:

  • 可以在没有root访问权限的情况下(在非特权端口上)在Android上运行SMB服务器。Mac OS X连接到它没有任何问题(如果您通过Bonjour广播了IP和端口)。但是Windows不。正如其他用户已经说过的那样,Windows使用“硬编码”特权端口进行SMB访问。我发现与Windows连接的唯一方法是创建作为解释的回环网络适配器这里(不相同的目的,但这个想法)。最后,我认为,用户友好的方法是在Windows上使用WebDAV。即使Windows这样做并不友好,因为您必须手动输入ip,而我却找不到找到它的方法(如果您知道,请给我下一行)。
  • 在Mac OS X世界中,SMB协议无疑是赢家。您的份额将由Bonjour自动发现,并神奇地出现在Finder中。奇怪的是,尽管Bonjour 支持 WebDAV和FTP共享(而不是Finder自动挂载),但它们却被忽略了。第三方客户(例如Cyber​​duck)在自动发现这些股票方面没有问题。

1

我可能会误会,但听起来您需要一个SMB客户端,而不是服务器。另外,您不需要root用户访问权限。要使用SMB将文件传输到计算机,您可以将ASTRO File ManagerSMB插件一起使用,或者也可以免费使用File Expert

您也可以通过WebSharing之类的应用程序使用WebDAV而不是SMB 。

过去,我使用一个应用程序,该应用程序在计算机上装有客户端软件,使我可以从文件管理器从网络上的任何地方传输文件。它不是完整的VNC应用程序。我有一部新手机,但现在我找不到自己的应用了。


嗨,谢谢你的回答,我真的很想在手机上安装一台服务器,以便我的(Ubuntu)PC可以在回家时将新文件推送到该服务器上,而不必甚至从口袋里掏出手机。最好不要在PC上安装其他软件,但是电话上的FTP或WebDAV服务器当然也可以满足该要求,因此看起来File Expert可以完成这项工作。我正在安装,现在将向您报告谢谢
Day

嗯,FTP服务器似乎无法正常工作-Ubuntu的“连接到服务器”向导显示“流的末尾意外”。必须去上班,以后会再试一次。

不,它确实有效。那应该很好地完成工作,谢谢。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.