Board logo

标题: Apache FtpServer搭建FTP服务器 [打印本页]

作者: shillan    时间: 2013-9-8 22:15     标题: Apache FtpServer搭建FTP服务器

前言
  FTP服务器很多朋友都选用Serv-U,一般都是找的破解版或免费使用30天的版本,这里推荐一款免费开源而且简单好用的FTP软件:Apache FtpServer,以下是搭建过程。


正文
  一、介绍
    Apache FtpServer是一个基于Apache MINA(一个高性能的Java异步并发网络通讯框架)开发的FTP 服务器。 既可以嵌到Java应用中使用,也可以做为Windows服务或Unix/Linux Daemon单独运行。此外还提供与Spring相集成的模块。(摘自www.open-open.com

  二、 准备
    下载地址:http://mina.apache.org/ftpserver/downloads.html
    本文使用1.0.6版本,点这里直接下载。

  三、 配置

    参照 四、参考文章 里面来配置, - - # 这里偷懒就不重复了,这里主要将两个问题:
    3.1  配置Pasv模式
      如果服务器 启用了TCP/IP 筛选,那按文章来是连不上的,这里需要补充一点FTP的知识,FTP有两种连接方式:主动连接模式和被动连接模式(Pasv),这里主要说Pasv模式:客户端会随机获取一个大于1024的端口来与FTP服务器端的端口21连接,完成连接后客户端通过这个连接来对FTP服务器下达指令。明白原理,就可以开始动手了:
      3.1.1  在TCP/IP筛选中打开端口21和1886(可自行设置其他端口)
      3.1.2  修改配置文件,如下:
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd   
       "
    id="myServer"
    max-logins="5"  
    anon-enabled="false"  
    max-anon-logins="0"  
    max-login-failures="3"  
    login-failure-delay="30000">
    <listeners>
        <nio-listener name="default" port="21">
            <ssl>
                        <keystore file="./res/ftpserver.jks" password="password" />
            </ssl>
            <data-connection idle-timeout="60">
                <active local-port="1886" />
                <passive ports="1886" />
            </data-connection>
        </nio-listener>
    </listeners>
    <file-user-manager file="./res/conf/myusers.properties" encrypt-passwords="clear"/>
</server>



      保存重新启动即可。首先FTP服务器是需要两个端口,一个上传端口,一个下载端口,所以只启用一个端口是不行的,这里固定了下载端口为1886。
    3.2  设置目录
      设置FTP为盘符根目录办法:      ftpserver.user.myusername.homedirectory=F:

      注意不带斜杠。


  四、参考文章
    使用Apache FtpServer搭建FTP服务器
    apache-ftpserver快速入门(windows平台)
    Apache FtpServer配置详解[百度文库]
    浅析FTP的工作原理

结束
  比起破解的Serv-U,还是更喜欢开源,使用方便,配置简单,欢迎大家也来试试吧。对了,还有一个中文文件夹显示乱码的问题,搜了一下都要改源码,就懒得动了,等升级解决吧,或者有知道简单办法的欢迎分享。
作者: shillan    时间: 2013-9-8 22:27     标题: 常见问题

注册为系统服务:
install.bat(放bin目录中)
  1. set JAVA_HOME=D:\jdk
  2. pause
  3. cd..
  4. bin/service install ftpd %cd%/res/conf/ftpd.xml
  5. pause
复制代码
删除系统服务:
uninstall.bat(放bin目录中)
  1. pause
  2. service remove
  3. pause
复制代码

作者: shillan    时间: 2013-9-8 22:30     标题: Apache Ftp Server 中文目录,中文文件名,IE访问乱码解决

Apache Ftp Server,目前是1.0.4,非常好的纯Java Ftp服务器,既可以直接提供FTP服务,有可以嵌入到程序里。
如果Ftp服务器提供的内容,有中文目录,文件名,XP下IE访问会出现一些错误。
如果IE的选项->高级里 为Ftp站点启用文件夹视图选项
没有选中,这时显示的是Html页面,但中文显示是乱码,强行指定编码为Utf8,则显示正常,但无法下载;
该选项选中,这时是文件夹方式显示Ftp服务器内容,选中文件夹后右键复制到文件夹,会复制出错,但用复制,然后粘贴到指定位置的方式可以正常复制。
使用windows带的ftp.exe访问站点,遇到中文也会出现错误。
但如果用流行的ftp客户端,比如FlashFXP就一切正常。
这说明XP 下IE的Ftp支持有bug。
但用户一般不用Ftp客户端,为了迁就IE,只有对ApacheFtpServer修改,通过查资料,XP下用的编码是GBK,只要把Apache FtpServer代码中处理编码的地方由国际标准UTF8编码改为迁就Xp下IE的GBK编码即可完成。

具体修改
org.apache.ftpserver.command.impl包里OPTS_UTF8.java
将  
session.write(LocalizedFtpReply.translate(session, request, context, FtpReply.REPLY_200_COMMAND_OKAY, "OPTS.UTF8", null));
改为
session.write(LocalizedFtpReply.translate(session, request, context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "OPTS.UTF8", null));

org.apache.ftpserver.listener.nio包里FtpServerProtocolCodecFactory.java

new TextLineDecoder(Charset.forName("UTF-8"));
改为:
new TextLineDecoder(Charset.forName("GBK"));  

org.apache.ftpserver.impl包里IODataConnection.java
将   
writer = new OutputStreamWriter(out, "UTF-8");  
改为:
writer = new OutputStreamWriter(out, "GBK");  

org.apache.ftpserver.listener.nio包里FtpResponseEncoder.java

Charset.forName("UTF-8").newEncoder();  
改为:
Charset.forName("GBK").newEncoder();  

重编译后,手动替换class就可以,如果用mvn package,test过不了,只有将出错的test文件DecoderTest和I18NTest删除,再package。
然后IE两种方式都可以正确的访问FTP服务器中的中文资源了。
作者: wang198805    时间: 2014-3-12 13:17

真正围观中...-_-
作者: cnmff    时间: 2014-7-12 22:23

谢谢了。。。 我很赞成,继续努力吧











bjcars.net




欢迎光临 逐梦论坛 (http://temp2023.zhumeng.org/) Powered by Discuz! 7.2