配置 FTP 服务器以支持 IPv6
下一代协议,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 文件表示
接着,在 $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 文件表示
接着,将 ipv6 用户添加到 admin 组。转到 $Install_Location,打开 grpdb.txt,然后将用户添加到 admin 组,类似于:
admin:admin1,admin2,ipv6
图 3 显示最终 grpdb.txt 文件的样子。
图 3. 最终 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 服务器
如果登录失败,请检查配置并再试一次。
|
回页首 |
|
配置 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
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
|