配置 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.anti-gravitydesign.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|