配置 FTP 服务器以支持 IPv6

发表于:2007-05-24来源:作者:点击数: 标签:服务器配置下一代IPv6ftp
下一代协议,Internet Protocol version 6 (IPv6),被广泛认为是 Internet 和 网络 世界的未来。这种认同已鼓励各个 IT 公司 开发 支持并使用 IPv6 地址格式进行相互通信的应用程序。在本文中,学习配置 File Transfer Protocol (FTP) 服务器以支持 IPv6,然
下一代协议,Internet Protocol version 6 (IPv6),被广泛认为是 Internet 和网络世界的未来。这种认同已鼓励各个 IT 公司开发支持并使用 IPv6 地址格式进行相互通信的应用程序。在本文中,学习配置 File Transfer Protocol (FTP) 服务器以支持 IPv6,然后通过一个简单的使用 IPv6 地址的 Java 程序来与 FTP 服务器通信。

IPv6,又称下一代协议,是现有 IPv4 网络基础的超集。IPv6 与 IPv4 相兼容和协作,允许您升级您的 Internet 设备。有关 IPv6 的更多信息,请参考我的前一篇文章 “Discover Internet Protocol version 6 (IPv6)”,在 参考资料 部分可以找到这篇文章。

在本文中,我将向您演示如何在两种 FTP 服务器上配置 IPv6:Orenosv 1.0(与 Microsoft® Windows® 兼容)和 vsftpd 2.0.1-5(与 Linux® 兼容)。您将使用 IBM® Java™ Runtime Environment (JRE) 1.5.0 来编写和执行示例 Java 应用程序。

配置 Windows FTP 服务器 Orenosv 以支持 IPv6

您可以从 Orenosv 站点(参阅 参考资料下载 Orenosv FTP 服务器。让我们来看看如何配置服务器来监听和接受 IPv6 地址。

首先,下载和安装服务器,默认安装在 $Drive/Program Files/Orenosv 中。创建用户帐户和其默认目录。转到安装位置,打开 passwd.txt,然后添加下面这一行:

ipv6:ipv6:/ftpusers/ipv6

在这一行中,ipv6 代表用户,ipv6 代表密码,而 ftpusers/ipv6 表示用户目录位置。图 1 显示了最终 passwd.txt 文件的样子。


图 1. 最终 passwd.txt 文件表示
最终 passwd.txt 文件表示

接着,在 $Install_Location/ftproot 中创建用户目录位置 ftpusers/ipv6。最终目录结构类似于:

$Install_Location\ftproot\ftpusers\ipv6

为您创建的 ipv6 用户提供访问控制。转到 $Install_Location,打开 acl.txt,然后添加下面这一行:

ftpuser/ipv6/* ALL="_all_" all="@admin"

最终 acl.txt 文件类似于 图 2


图 2. 最终 acl.txt 文件表示
最终 acl.txt 文件表示

接着,将 ipv6 用户添加到 admin 组。转到 $Install_Location,打开 grpdb.txt,然后将用户添加到 admin 组,类似于:

admin:admin1,admin2,ipv6

图 3 显示最终 grpdb.txt 文件的样子。


图 3. 最终 grpdb.txt 文件表示
最终 grpdb.txt 文件表示

要使 FTP 服务器接受 IPv6 请求,转到 $Install_Location,然后打开 http.conf。取消注释 http.conf 文件中的这些行:

ftp_enable = 1
            ftp_listen = 0.0.0.0@21
            ftp_port_srcport = 20
            

注释掉 http.conf 文件中的所有 Secure Sockets Layer (SSL) 条目,然后添加下面这一行以支持 IPv6:

ftp_listen=IPv6Address@21

IPv6Address 表示机器 IPv6 地址。这里是一个具有真实 IP 地址的示例:

ftp_listen = 2002:9b8:708a:0:0:0:0:1@21

要重新启动服务器,导航到 Start > Programs > Orenosv,并单击 Restart Orenosv Service。检查 FTP 服务器正在运行并可以监听 IPv6 请求。为此,打开命令行提示符并使用 IPv6 地址连接 FTP 服务器。如果登录成功,服务器看上去将与 图 4 类似。


图 4. 成功登录 FTP 服务器
登录 FTP 服务器

如果登录失败,请检查配置并再试一次。





回页首


配置 Linux FTP 服务器 vsftpd 以支持 IPv6

vsftpd 服务器默认附带有 Red Hat Enterprise Linux (RHEL)。让我们配置服务器来监听和接受 IPv6 地址。

首先,以 root 用户登录然后打开 vsftpd.conf,该文件通常位于 /etc/vsftpd 目录中。注释掉 vsftpd.conf 文件中的下面这一行:

listen=yes

将这一行添加到 vsftpd.conf 中以支持 IPv6:

listen_ipv6=yes

要重新启动 vsftpd 服务器,使用 service vsftpd restart 命令。如果重新启动失败,请检查 vsftpd.conf 条目。





回页首


编写示例 FTP 客户机程序

让我们编写一个简单的 Java FTP 客户机程序来实现下列功能:

  • 使用 IPv6 数字地址连接 FTP 服务器
  • 在与服务器建立连接之后显示用户登录目录下的文件
  • 提示用户输入要下载的文件名
  • 从 FTP 服务器下载各自的文件之后退出

您可以下载 zip 文件(参阅 下载),其中包含有用来运行程序的所有相关文件的完整代码;在 运行 Java 应用程序 一节参看更多有关说明。清单 1 解释程序的核心逻辑。


清单 1. 从支持 IPv6 的 FTP 服务器获取文件的示例 Java 程序
package com.ibm.ipv6.ftp;
            import java.io.BufferedInputStream;
            import java.io.BufferedReader;
            import java.io.File;
            import java.io.FileOutputStream;
            import java.io.InputStreamReader;
            import sun.net.ftp.FtpClient;
            /**
            * @author Makham Kumar
            *
            */
            public class IPv6FTPClient extends FtpClient{
            private static final String sourceClass = "IPv6FTPClient";
            private static final String SPACE= " ";
            private static final String SEP = "-";
            private static final String LINE = "\n";
            public IPv6FTPClient(){ }
            public static void main(String[] ipv6Main) {
            final String sourceMethod = "main";
            BufferedReader bRead = null;
            IPv6FTPClient ipv6Ins = null;
            String strOption = null;
            String strFileName = null;
            boolean bStatus = true;
            try {
            if(ipv6Main.length == 3)
            {
            ipv6Ins = new IPv6FTPClient();
            ipv6Ins.loginToMachine(ipv6Main[0], ipv6Main[1], ipv6Main[2]);
            ipv6Ins.listFileSets();
            // Capturing details from the user to download files from the FTP server
            do {
            console(LINE+LINE+SPACE+"Want to download a file ? [Y/N] : ");
            bRead = new BufferedReader(new InputStreamReader(System.in));
            strOption = bRead.readLine();
            if(strOption.equalsIgnoreCase("Y"))
            {
            console(LINE+SPACE+"Enter the file name to download : ");
            strFileName = bRead.readLine();
            bStatus = ipv6Ins.getFile(strFileName);
            }
            else if(strOption.equalsIgnoreCase("N"))
            {
            bStatus = false;
            ipv6Ins.closeServer();
            console(LINE+LINE+SPACE+"Closing the FTP server connection "+LINE);
            }
            else
            {
            bStatus = false;
            console(LINE+LINE+SPACE+"Entered invalid option.");
            }
            } while (bStatus);
            bRead.close();
            }
            else
            {
            console(LINE+"Entered invalid arguments");
            }
            console(LINE+LINE+SPACE+"Application existing !!!"+LINE+LINE);
            }catch(Exception eM)
            {
            eM.printStackTrace();
            console(LINE+"Application existing !!!"+LINE+LINE);
            }
            finally
            {
            try {
            if(bRead != null)
            bRead.close();
            } catch (Exception eFinally) {
            eFinally.printStackTrace();
            }
            }
            }
            /**
            * This utility method connects to FTP server using Username and Password
            * @return void
            */
            private void loginToMachine(String strMachine, String strUser, String strPasswd)
            {
            final String sourceMethod = "loginToMachine";
            try{
            openServer(strMachine);
            login(strUser,strPasswd);
            console(sourceMethod,"Suclearcase/" target="_blank" >ccessfully connected to FTP server");
            binary();
            } catch(Exception eLogin)
            {
            eLogin.printStackTrace();
            System.exit(0);
            }
            }
            /**
            * This utility method lists the names of the files in
            * the respective FTP user directory
            * @return void
            */
            private void listFileSets()
            {
            final String sourceMethod = "listFileSets";
            String fileName;
            BufferedReader reader = null;
            try{
            reader = new BufferedReader(new InputStreamReader(list()));
            while ((fileName = reader.readLine()) != null) {
            console(LINE+fileName);
            }
            reader.close();
            }catch(Exception eList)
            {
            eList.printStackTrace();
            }
            finally
            {
            try {
            if(reader != null)
            reader.close();
            }catch (Exception eFinally) {
            eFinally.printStackTrace();
            }
            }
            }
            /**
            * This utility method downloads the file from the FTP server to
            * the location where this Java program is executed
            * @return boolean
            */
            private boolean getFile(String fileName)
            {
            final String sourceMethod = "getFile";
            boolean bStatus = false;
            BufferedInputStream bInputStream = null;
            FileOutputStream fOutputStream = null;
            String strPath = "."+File.separator+"download"+File.separator;
            try {
            bInputStream = new BufferedInputStream(get(fileName));
            fOutputStream = new FileOutputStream(strPath+fileName);
            int iStart = 0;
            byte[] byteArray = new byte[1024];
            while ((iStart = bInputStream.read(byteArray)) >= 0) {
            fOutputStream.write(byteArray, 0, iStart);
            }
            fOutputStream.close();
            bInputStream.close();
            console(sourceMethod,"Successfully downloaded the file : "+fileName);
            bStatus = true;
            } catch (Exception eGetFile) {
            eGetFile.printStackTrace();
            }
            finally
            {
            try {
            if(fOutputStream != null)
            fOutputStream.close();
            if(bInputStream != null)
            bInputStream.close();
            } catch (Exception eFinally) {
            eFinally.printStackTrace();
            }
            }
            return bStatus;
            }
            /**
            * This utility method prints the text to console
            * @param String - Source method name
            * @param String - Message text
            * @return void
            */
            private static void console(String sourceMethod, String msgText)
            {
            System.out.println(LINE+SPACE+sourceClass+SEP+sourceMethod+SEP+msgText);
            }
            /**
            * This utility method prints the text to console
            * @param String - Message text
            * @return void
            */
            private static void console(String msgText)
            {
            System.out.print(msgText);
            }
            }
            





回页首


运行 Java 应用程序

应用程序打包在一个压缩文件中。解压缩文件并下载到 SampleAppl 目录。lib 目录包含 Java Archive (JAR) 格式的应用程序,还有完整的 Java 源代码。来自 FTP 服务器的所有文件都下载到 download 目录。Run.bat 和 Run.sh 文件是特定于操作系统的脚本文件,用于运行应用程序。要运行应用程序,打开 Run.bat(对于 Windows)或 Run.sh(对于 Linux),并编辑这些登录细节的值:

set IPV6ADDRESS="$IPV6_ADDRESS"
            set USERID="$USERID"
            set PASSWD="$PASSWD"
            set JAVA_HOME_15="$JAVA_HOME_15"
            

例如,您的登录细节可能类似于:

set IPV6ADDRESS="2002:9b8:708f:0:0:0:0:1"
            set USERID="ipv6"
            set PASSWD="ipv6"
            set JAVA_HOME_15="C:\Makham\was\wasnd\java"
            

打开命令行提示符,导航到脚本文件解压缩的目录,并执行 Run.bat 或 Run.sh,如 图 5 所示。


图 5. 应用程序输出信息
应用程序输出信息

在成功登录之后,应用程序列出文件并提示用户输入要下载的文件。本例使用 Welcome.txt。应用程序加载 Welcome.txt,将其放置在 download 目录,然后退出。

恭喜!您已成功配置 FTP 服务器以支持 IPv6,并使用 Java 应用程序从 FTP 服务器接收了文件。





回页首


结束语

您只学习了如何配置和编写 Java 程序来与启用 IPv6 的 FTP 服务器通信。您可以运用这些概念来编写可以与其他启用 IPv6 的服务器(如 Simple Mail Transfer Protocol (SMTP) 和 Post Office Protocol version 3 (POP3))通信的 Java 应用程序。






回页首


下载

描述名字大小下载方法
Sample code for this article wa-ftpipv6-SampleAppl.zip 6KB HTTP

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)