局域网文件分享协议和方案的探究

来源:互联网 发布:何新 知乎 编辑:程序博客网 时间:2024/06/01 14:38

不管是学习还是工作中经常遇见这样一种情况,需要传输一些文件给同学,同事或者其他人,这些文件经常是些软件安装包,素材,文档,游戏安装包,软件安装环境等等。多数情况下都会选择使用u盘,先把文件复制进去,然后把u盘交给其他人,那个人再拷贝出来,完成一次文件传输。当然作为一个IT人士,程序猿,或者Geek这样传输实在太没品太不装X了,而且主要有以下弊端:

1、受u盘大小的限制,如果你有一个4G优盘,并且已经使用了一部分空间,那么你传输一个稍微大一点的文件就呵呵了。

2、受u盘速度的限制,比如传输一个Matlab安装包,或者一段高清电影,假设这个文件大小为5GB, 你使用一个路边买来的杂牌8G USB2.0 u盘,写入速度2MB/s,读取速度4MB/s,那么你写入这个文件需要5*1024/2/60=42.6分钟,你把u盘交给别人那个人后,那个人拷贝到电脑上耗时5*1024/4/60=21.33分钟,传输这个文件至少需要42.6+21.3=63.9分钟。也就是说传输一个5G文件要一个小时。何况有些游戏安装包,蓝光视频都10G以上,有的电脑只有一个USB口的这你就慢慢等吧,要是中间断掉了还得重来。

3、受文件数量限制,只要体会过就会知道,拷贝同样大小的一个大文件要比一堆小文件要快的多,要是你有数千个word文档,你会发现压缩成zip包之后的拷贝速度要比直接拷贝到u盘快好几倍。

4、u盘里的其他文件都暴露了,我们在学习和工作中使用的u盘往往不是空的,里面可能会有很多其他我们不想给别人看或者知道的文件,如果你使用u盘传输,别人好奇想要看看你u盘里的其他文件你也拦不住,总不能一直在屏幕上盯着吧。

5、无法同时和多人分享文件。以前在学校经常有这样一种情况,老师把一个文件拷贝到一个u盘里,然后让全班同学传递这个u盘来拷贝,如果一个班30多个学生等传递完早就下课了,而一个u盘又不能同时插两个电脑。非常耽误时间。

鉴于u盘分享有如此多的弊端,所以我们在工作和学习中急需一个方便快速安全的方式来和别人分享文件,由于一般我们和同学,舍友,同事都在同一个局域网内,所以可以使用网络协议来完成这些事情,也就是FTP,HTTP,SMB这些常用协议,我们主要要实现以下目标

1、本机搭建文件服务器要尽量方便快速,只需鼠标点几下就能完成。

2、接收文件的人不需要安装任何软件,什么准备都不用做就可以接收文件,哪怕是个对电脑一窍不通的小白或者老人都可以收到文件。

3、对于接收文件的人设置用户名和密码登录,避免无关人员下载到你的文件

4、接收文件的人可以选择先接收哪个,后接收哪个

5、可以多个人同时接收你的文件

6、不论接收人用windows,MAC OS还是Ubuntu甚至是Android手机都可以接收你的文件


FTP协议:

ftp协议已经满足上面提出的所有要求,字如其名是文件分享的首选方案,我们既可以使用自己电脑搭建FTP服务器也可以找个闲置电脑搭建ftp服务器,下面简单介绍一下windows服务端和Linux服务端的搭建

FTP服务端搭建一般有三个步骤:

1、安装服务端软件

2、添加客户端登陆用户名密码

3、设置共享的文件夹

Windows服务端搭建:

我们选择开源而且免费的FTP软件filezilla来实现服务器的搭建,可以到https://www.filezilla.cn/ 上下载最新版本,注意选择服务器端而不是客户端下载

下载完之后进行安装,安装过程中什么都不用改,直接下一步就行,安装完后会自动在14147端口开启FTP服务,然后运行FileZilla Server Interface.exe 登录localhost,如下图


这样第一步就完成了,下面我们配置登录用户的用户名密码,点击界面最上面的人头标记,然后点击ADD添加一个用户名,我这里添加了一个“alex1”并设置了密码


这样一个客户端用户就添加完成了,然后设置共享目录,选择左面的“Shared folders”


我这里分享“D:\安装包”下面的所有文件,并且可以设置某些用户的读写权限。至此一个ftp服务器就搭建完毕了

此时接收文件的人在浏览器上输入”ftp://你电脑的ip地址“ 然后输入用户名密码,整个“D:\安装包”文件夹就显示在屏幕上,点击相应文件就可以下载了,如下图



Linux FTP服务端的搭建

Linux会稍微麻烦一点,首先要安装ftp服务软件vsftpd

sudo apt-get update

sudo apt-get install vsftpd


然后修改vsftpd的配置

sudo nano /etc/vsftpd.conf

添加下图中黄线中的几行


修改完之后重启vsftpd服务:sudo service vsftpd restart

然后添加客户端用户名和密码,顺便设置共享目录

首先新建用户,这里设置用户名为alex2,让共享目录为用户目录/home/alex2

sudo mkdir /home/alex2 #新建分享文件夹

sudo useradd -d /home/alex2 -s /bin/bash alex2 #添加新用户alex2

sudo passwd alex2 #设置alex2的密码

然后把新用户alex2添加到FTP服务器的白名单里

sudo nano /etc/allowed_users

添加一行alex2,如下图


然后像windows服务端一样,接收人使用”ftp://你电脑的ip地址“ 然后输入alex2和密码就可以下载/home/alex2目录下的内容了


HTTP协议:

FTP协议已经很强大很实用了,但是如果你想要实现更多功能,比如更花哨的Web界面,下载统计,数据库等等可以搭建HTTP服务器,一般用NodeJS和Tomcat就可以实现

NodeJS Windows服务端搭建

首先到https://nodejs.org下载稳定版的NodeJS安装包,然后安装。

下面这一段摘自Express的说明文档

首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录。

$ mkdir myapp$ cd myapp

通过 npm init 命令为你的应用创建一个 package.json 文件。 欲了解 package.json 是如何起作用的,请参考 Specifics of npm’s package.json handling。

$ npm init

此命令将要求你输入几个参数,例如此应用的名称和版本。 你可以直接按“回车”键接受默认设置即可,下面这个除外:

entry point: (index.js)

键入 app.js 或者你所希望的名称,这是当前应用的入口文件。如果你希望采用默认的 index.js 文件名,只需按“回车”键即可。

接下来安装 Express 并将其保存到依赖列表中:

$ npm install express --save

如果只是临时安装 Express,不想将它添加到依赖列表中,只需略去 --save 参数即可:

$ npm install express
安装过程大约是这样的


然后新建d:\fileshare\index.js,输入如下内容

var express = require('express');  var app = express();    app.get('/', function (req, res) {    res.send('Hello World!');  });  app.use(express.static('public'));    var server = app.listen(3000, function () {    var host = server.address().address;    var port = server.address().port;      console.log('Example app listening at http://%s:%s', host, port);  });  
然后新建d:/fileshare/public 文件夹,把要分享的文件复制到这个文件夹中去。

然后启动nodeJS服务器,用下面的命令

node index.js
然后通过浏览器访问http://localhost:3000 可以看到浏览器输出一句Hello World!,说明NodeJS服务器运转正常

然后访问我们部署好的静态文件setup.exe只需要访问http://localhost:3000/setup.exe就可以开始下载了,这里要注意public文件夹映射到了3000端口的根目录,也就是说不必在url中输入/public。

然后我们就可以把http://你的局域网IP地址:3000/setup.exe发给你的小伙伴让他用迅雷或者浏览器下载这个文件了。

Linux NodeJS文件服务器搭建见我另一片博客:http://blog.csdn.net/lvshaorong/article/details/52344733

当然这种搭建方式虽然简便快速,但是只能通过发url给小伙伴的方式让他去下载,他没有web界面可以看,也不能选择,只能你给他什么她就下载什么,如果你想要增加web UI界面需要另费一番功夫来做开发,下面介绍使用Tomcat搭建带有web图形界面的HTTP文件服务器。
Tomcat文件服务器的搭建
现在我们希望搭建一个自定义UI的web页面,然后可以在web页面点击需要的文件下载,然后我简单写了一个扫描文件夹的java方法,将扫描到的所有文件的文件名(不含子文件夹的递归)发送到前台供点击,布局上使用了bootstrap,然而你可以通过修改源码弄的更酷炫一点,使用也非常简单,你只需要去http://tomcat.apache.org/download-80.cgi 下载tomcat8(我在8.0.33上编写和测试的),然后安装tomcat,然后下载war包,将war包放置到tomcat根目录下的/webapps文件夹下,然后启动tomcat即可,添加文件就添加到/webapps/fileshare/release文件夹当中即可。你只需要让别人浏览器登录http://你的局域网IP地址:8080/fileshare 即可。下面放截图
war包下载地址:http://download.csdn.net/detail/lvshaorong/9718575
SMB协议:
SMB协议就是我们熟知的windows上的“网上邻居”,通过网上邻居可以很方便的吧自己电脑上的某个文件夹共享出来,也可以去别人电脑上把文件下载下来,操作别人电脑上的文件和操作自己电脑的文件几乎一模一样,用来做windows共享非常的方便,可惜这个协议有几个缺点:
1、安全性堪忧,由于用起来太方便于是也成为了黑客攻击的主要目标,而windows为了提升安全性给smb协议添加了非常多的限制,几乎没有几个钟头的功夫你是没法把自己电脑上的文件共享给局域网的,而且如果你真的共享出去了,你的电脑就变成了一个毫无防御力的肉鸡,等于敞开大门给黑客,所以方便的同时也把自己的电脑暴露给了千千万万在公网游荡的黑客。
2、不能通用,即使你费劲千辛万苦搭建好了一台windows7 网上邻居文件服务器,但是局域网内的Linux电脑和mac电脑一样接入不了你的服务器。要想把这两个平台打通实在太费力气了,所以SMB协议并不是一个受欢迎的协议。
你在搭建windows smb服务器的时候会碰到各种问题,比如它会经常提示你“用户名密码输入错误”尽管你没有设置用户名密码,还会提示你各种没有登录权限,登录类型不对等等问题,我在网上找到一个非常全面的搭建说明,把每一步可能碰到的问题都调通了。不过这样一番搭建下来你的计算机相当于裸奔,对于外部攻击毫无抵抗。搭建说明:http://jingyan.baidu.com/article/59a015e3ada612f795886544.html
其中概括一下,就是首先在“计算机管理”中启用Guest来宾账户
然后在“本地安全策略”中允许从网络访问此计算机并添加Guest账户的权限,这等于给黑客开了大门,然后还要把“拒绝访问此计算机”这个黑名单中把guest账户去掉,不然之前的配置等于白做
最后还要在“本地安全策略”中允许空密码的访问,不然只能用管理员账户和密码访问。等于你的电脑已经完全丧失了防御能力。
但是好处也不必多说,局域网的其他电脑只要进入“网上邻居”就可以和操作本地文件一样操作服务器文件,真的是很方便很快速



0 0
原创粉丝点击