ftp開發介面
㈠ ftp是指的什麼
FTP是指文件傳輸協議。
FTP是一種應用層協議,它在計算機網路中扮演著重要角色,主要用於在計算機之間傳輸文件。以下是關於FTP的
一、FTP的基本定義
FTP是一種基於客戶端和伺服器架構的協議,允許用戶在互聯網上或其他網路之間交換文件。它提供了一種可靠且高效的方法,用於將文件從一台計算機傳輸到另一台計算機。無論是在區域網還是廣域網環境下,FTP都得到了廣泛應用。
二、FTP的工作原理
在FTP中,客戶端向伺服器發出請求,要求傳輸文件。伺服器響應這些請求,並通過網路將文件發送回客戶端。FTP使用了一種稱為「埠」的網路介面,在伺服器端和客戶端之間建立連接並進行數據傳輸。這種連接可以是主動模式或被動模式,具體取決於網路配置和防火牆設置。
三、FTP的應用場景
FTP廣泛應用於許多領域。例如,網站管理員經常使用FTP上傳和下載網站文件,軟體開發人員則使用FTP來更新軟體版本或修復錯誤。此外,許多企業和組織也使用FTP來共享和備份重要數據。由於其可靠性和安全性,FTP已成為互聯網上最常用的文件傳輸方法之一。
四、FTP的安全性
雖然傳統的FTP協議在文件傳輸方面非常有效,但它並不包含內置的安全性功能。因此,在傳輸敏感數據時,建議使用FTP的安全版本,如SFTP或FTPS。這些協議提供了數據加密和身份驗證等功能,增強了文件傳輸的安全性。
總的來說,FTP是一種用於在網路上傳輸文件的協議,廣泛應用於各種場景。由於其簡單性和可靠性,它已成為互聯網上最常用的文件傳輸方法之一。
㈡ 基於C#的FTP開源庫,讓你快速完成FTP文件傳輸功能,提升開發效率!
推薦一個基於C#開發的FTP開源項目,讓你快速集成文件傳輸功能。
FluentFTP是一個基於.Net開發的,適用於FTP和FTPS文件傳輸的項目。該開源項目優化了傳輸速度,並提供了一套簡潔易用的API介面,使得開發人員能夠迅速集成並滿足大多數需求。
FluentFTP的API設計採用了流暢的編程風格,使得代碼編寫和閱讀變得簡單高效。用戶可以通過API輕松實現連接、上傳、下載、刪除、重命名等文件操作。此外,該庫還具備斷點續傳功能,能夠繼續上次未完成的操作,並支持ASCII和二進制模式的文件傳輸。
在文件夾操作方面,FluentFTP允許用戶創建、刪除、列出文件夾。對於未知的文件類型,系統能夠自動解析目錄列表,確保文件的正確傳輸。用戶還可以計算文件的哈希/校驗和,以驗證文件的完整性,同時設置文件許可權。此外,項目還支持FTP代理,允許通過代理伺服器進行連接。FXP傳輸功能允許用戶在兩個FTP伺服器之間進行文件傳輸。同時,FluentFTP還支持UTF-8編碼的文件名和路徑,並提供了非同步/等待支持,確保在不阻塞主線程的情況下進行文件傳輸。
為了方便安裝和管理,FluentFTP還支持PowerShell環境。用戶可以通過PowerShell輕松安裝和管理FTP庫。
如果你需要快速集成FTP文件傳輸功能,FluentFTP將是一個高效且易於使用的解決方案。
項目地址:github.com/robinrodrick...
了解更多.Net開源項目,可訪問一個專注推薦.Net開源項目的榜單。
㈢ Android開發訪問FTP伺服器
commons-net.jar裡面有ftp相關的介面,這個是我自己封裝的一個類
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class FTPUtils {
/**
* 通過ftp上傳文件
*
* @param fileNamePath
* 要上傳的文件路徑 , 以'結'尾
* @param fileName
* 要上傳的文件名
* @return 如果成功返回"" , 否則返回錯誤結果
*/
public static String ftpUpload(String sdcardFullFileName, String fileName, String ftpPath) {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
String returnMessage = "";
try {
ftpClient.connect(ConnectConfig.ftpIP, ConnectConfig.ftpPort);
boolean loginResult = ftpClient.login(ConnectConfig.ftpUserName, ConnectConfig.ftpPassWord);
int returnCode = ftpClient.getReplyCode();
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登錄成功
String[] splits = ftpPath.split("/");
String temps = splits[0];
ftpClient.makeDirectory(temps);
for(int i=1;i<splits.length;i++){
temps += "/" + splits[i];
ftpClient.makeDirectory(temps);
}
// ftpClient.makeDirectory(ftpPath);
// 設置上傳目錄
ftpClient.changeWorkingDirectory(ftpPath);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
fis = new FileInputStream(sdcardFullFileName);
// boolean result = ftpClient.(fileName, fis);
boolean result = ftpClient.storeFile(fileName, fis);
if(result){
returnMessage = ""; // 上傳成功
}else{
returnMessage = "上傳失敗";
}
} else {// 如果登錄失敗
returnMessage = "登錄FTP時失敗,FTP用戶名或者密碼錯誤!";
}
} catch (IOException e) {
// ftp發送出現異常
e.printStackTrace();
returnMessage = "FTP客戶端出錯!" + e;
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return returnMessage;
}
}
㈣ ftp進行控制連接時使用的默認埠號為
ftp進行控制連接時使用的默認埠號為【答案】:D
FTP文件傳輸服務,默認情況下,其控制埠為TCP 21,上傳文件時的埠為數據埠為TCP 20。80號埠為HTTP協議的默認埠,大於1024的埠為客戶端自定義埠。
FTP是一種基於TCP的高級文件協議,在傳輸過程中,主要分為連接建立和數據傳輸兩部分,響應的涉及伺服器端的命令埠和數據埠。 建立連接是一種基於tcp的三次握手模型,對於ftp伺服器,它使用固定的21命令埠與客戶端進行通信。 在數據傳輸期間、ftp傳輸期間,通過在服務端數據通信期間選擇不同的數據埠,可以將ftp分為主動模式(Port )和被動模式(Pasv )。 對於客戶端,這兩種模式對埠沒有固定性,只能在創建時主動指定本地埠或隨機埠,但對於伺服器,可以使用伺服器上固定的20個埠,或伺服器根據連接立即指定1025個或更多數據埠但是,命令傳輸埠對伺服器來說始終是21個埠。
FTP服務端支持兩種模式。 在具體的通信過程中,選擇哪個模式取決於客戶端的選擇。 然後介紹了兩種模式的具體流程和相關原理。
1.ftp兩種運行模式
Port模式(主動)
FTP客戶端從任何非特殊埠(N 1023 )連接到FTP伺服器命令埠21。 然後,客戶端在n1(n1=1024 )埠上監聽,並通過n1(n1=1024 )埠向FTP伺服器發送命令。 服務建立從服務20埠到用戶本地指定埠的數據傳輸連接。
處於活動模式的FTP的主要問題實際上在於客戶端。 FTP客戶端不會主動連接到伺服器的數據埠,而是告訴伺服器正在接收哪個埠,然後伺服器開始連接到客戶端上的指定埠。 但是,這樣的連接有時候會被客戶端的防火牆阻止
具體原理
以下是活動模式下的FTP的具體示例。
在活動模式的FTP中,客戶端通過隨機非系統埠(N 1023 )連接到FTP伺服器的命令埠21。 然後,客戶端開始監聽埠N 1,並將FTP命令埠N 1告訴FTP伺服器「請將數據發送到我的N 1埠」。 然後,服務從本地數據埠(埠20 )連接到客戶端數據埠,即N 1埠。
由於伺服器防火牆已隔離,因此必須確保從伺服器FTP到客戶端的以下幾個通道已順利進行:
FTP伺服器埠21 (接受所有客戶端) ) ) ) ) ) ) )。
FTP伺服器埠21~1023 (伺服器響應客戶端控制埠)
FTP伺服器埠20到1023上的埠(伺服器開始連接到客戶端數據埠)。
從1023埠到FTP伺服器埠20 (客戶端向伺服器數據埠發送ack ) )。
用圖表示這些通道:
在步驟1中,客戶端命令埠連接到伺服器命令埠,並發送命令埠1027。 然後,服務在步驟2中將ACK發送回客戶端命令埠。 在步驟3中,服務在本地數據埠上啟動連接,並連接到前面指定的客戶端數據埠。 最後,客戶端返回ACK,如步驟4所示。
Pasv模式(被動)
Pasv是Passive的縮寫,中文處於被動模式。 工作原理: FTP客戶端連接到FTP伺服器的21個埠,並通過發送用戶名和密碼進行登錄。 成功登錄後,讀取list列表或數據時,將Pasv命令發送到FTP伺服器。 伺服器本地隨機開放一個埠(1024或更高),將開放埠傳遞給客戶端,然後客戶端連接到伺服器的開放埠進行數據傳輸
被動模式的FTP的具體例子如下所示。
在被動模式的FTP中,客戶端啟動到伺服器的兩個連接,以解決防火牆阻止伺服器到客戶端的傳入數據埠連接的問題。 建立FTP連接後,客戶端將在本地打開兩個隨機的非系統埠n和n1(n1023 )。 第一個埠連接到伺服器的21個埠,但客戶端現在發出PASV命令。 這意味著伺服器不能重新連接到數據埠。 這將使服務打開隨機的非系統埠p(p1023 ),並將p發送到客戶端以響應PASV命令。 然後,客戶端啟動從埠N 1到埠p的連接並傳輸數據。
被動模式保持以下通道的平滑度:
FTP伺服器的21個埠(接受所有客戶端)
從FTP伺服器的21埠到1023埠的遠程埠(伺服器響應客戶端控制埠) ) ) )。
FTP伺服器1023上的埠(從所有客戶端接受到伺服器指定隨機埠的連接)。
從FTP伺服器1023的埠到1023的遠程埠(伺服器將ack和數據發送到客戶端數據埠)。
被動模式用圖表示:
在步驟1中,客戶端通過命令埠連接到伺服器並發出PASV命令。 然後,服務在步驟2中使用埠2024進行響應,並通知客戶端正在接收的數據連接
口。第 3 步,客戶端啟動從其數據埠到指定伺服器數據埠的數據連接。最後,伺服器在第 4 步將 ACK 發送回客戶端的數據埠。
被動模式的FTP的需要在服務端進行開放埠區段設置,用來開放給客戶端進行連接,如果被動模式下,出現客戶端可以訪問ftp服務端文件的列表,但是無法進行下載等進一步操操作,出現這種問題的原因,是服務端的文件無法被讀取或者是無法通過網路埠進行傳輸。可以按照以下步驟進行排查:
1)檢查服務端端對文件的許可權設置是否完全,登錄用戶是否存在下載許可權;
2)如果登錄用戶存在下載許可權,那麼需要進一步檢查伺服器端的數據傳輸介面是否開放,如果有防火牆的話,是否配置了防火牆的出站入站埠規則;
3)如果仍然存在問題,檢查被動模式下的ftp伺服器的數據埠設置是否進行指定,默認是1025-6000,指定的埠區段是否已經配置了防火牆的出站規則;
2.兩種模式的比較
從上面的運行原來看到,主動模式和被動模式的不同簡單概述為: 主動模式傳送數據時是「伺服器」連接到「客戶端」的埠;被動模式傳送數據是「客戶端」連接到「伺服器」的埠。
主動模式需要客戶端必須開放埠給伺服器,很多客戶端都是在防火牆內,開放埠給FTP伺服器訪問比較困難。
被動模式只需要伺服器端開放埠給客戶端連接就行了。
3.不同工作模式的網路設置
我在實際項目中碰到的問題是,FTP的客戶端和伺服器分別在不同網路,兩個網路之間有至少4層的防火牆,伺服器端只開放了21埠, 客戶端機器沒開放任何埠。FTP客戶端連接採用的被動模式,結果客戶端能登錄成功,但是無法LIST列表和讀取數據。很明顯,是因為伺服器端沒開放被動模式下的隨機埠導致。
由於被動模式下,伺服器端開放的埠隨機,但是防火牆要不能全部開放,解決的方案是,在ftp伺服器配置被動模式下開放隨機埠在 50000-60000之間(范圍在ftp伺服器軟體設置,可以設置任意1024上的埠段),然後在防火牆設置規則,開放伺服器端50000-60000之間的埠端。
主動模式下,客戶端的FTP軟體設置主動模式開放的埠段,在客戶端的防火牆開放對應的埠段。
4.常見的ftp客戶端設置被動模式
(1)IE:工具 -> Internet選項 -> 高級 -> 「使用被動FTP」(需要IE6.0以上才支持)。(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> 「PASV Mode」 或File -> Site Manager,在左邊選中站點 -> Edit -> 「Use PASV mode」 。(3)FlashGet:工具 -> 選項 -> 代理伺服器 -> 直接連接 -> 編輯 -> 「PASV模式」。(4)FlashFXP:選項 -> 參數選擇 -> 代理/防火牆/標識 -> 「使用被動模式」 或 站點管理 -> 對應站點 -> 選項 -> 「使用被動模式」或快速連接 -> 切換 -> 「使用被動模式」。
極速賽車五碼穩贏技巧否完全,登錄用戶是否存在下載許可權;
2)如果登錄用戶存在下載許可權,那麼需要進一步檢查伺服器端的數據傳輸介面是否開放,如果有防火牆的話,是否配置了防火牆的出站入站埠規則;
3)如果仍然存在問題,檢查被動模式下的ftp伺服器的數據埠設置是否進行指定,默認是1025-6000,指定的埠區段是否已經配置了防火牆的出站規則;
2.兩種模式的比較
從上面的運行原來看到,主動模式和被動模式的不同簡單概述為: 主動模式傳送數據時是「伺服器」連接到「客戶端」的埠;被動模式傳送數據是「客戶端」連接到「伺服器」的埠。
主動模式需要客戶端必須開放埠給伺服器,很多客戶端都是在防火牆內,開放埠給FTP伺服器訪問比較困難。
被動模式只需要伺服器端開放埠給客戶端連接就行了。
3.不同工作模式的網路設置
我在實際項目中碰到的問題是,FTP的客戶端和伺服器分別在不同網路,兩個網路之間有至少4層的防火牆,伺服器端只開放了21埠, 客戶端機器沒開放任何埠。FTP客戶端連接採用的被動模式,結果客戶端能登錄成功,但是無法LIST列表和讀取數據。很明顯,是因為伺服器端沒開放被動模式下的隨機埠導致。
由於被動模式下,伺服器端開放的埠隨機,但是防火牆要不能全部開放,解決的方案是,在ftp伺服器配置被動模式下開放隨機埠在 50000-60000之間(范圍在ftp伺服器軟體設置,可以設置任意1024上的埠段),然後在防火牆設置規則,開放伺服器端50000-60000之間的埠端。
主動模式下,客戶端的FTP軟體設置主動模式開放的埠段,在客戶端的防火牆開放對應的埠段。
4.常見的ftp客戶端設置被動模式
(1)IE:工具 -> Internet選項 -> 高級 -> 「使用被動FTP」(需要IE6.0以上才支持)。(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> 「PASV Mode」 或File -> Site Manager,在左邊選中站點 -> Edit -> 「Use PASV mode」 。(3)FlashGet:工具 -> 選項 -> 代理伺服器 -> 直接連接 -> 編輯 -> 「PASV模式」。(4)FlashFXP:選項 -> 參數選擇 -> 代理/防火牆/標識 -> 「使用被動模式」 或 站點管理 -> 對應站點 -> 選項 -> 「使用被動模式」或快速連接 -> 切換 -> 「使用被動模式」。
㈤ 如何搭建自己的FTP伺服器
一、操作系統的選擇
FTP伺服器首先是基於操作系統而運作的,因而操作系統本身的安全性就決定了FTP伺服器安全性的級別。雖然Windows 98/Me一樣可以架設FTP伺服器,但由於其本身的安全性就不強,易受攻擊,因而最好不要採用。Windows NT就像雞肋,不用也罷。最好採用Windows 2000及以上版本,並記住及時打上補丁。至於Unix、Linux,則不在討論之列。
二、使用防火牆
埠是計算機和外部網路相連的邏輯介面,也是計算機的第一道屏障,埠配置正確與否直接影響到主機的安全,一般來說,僅打開你需要使用的埠,將其他不需要使用的埠屏蔽掉會比較安全。限制埠的方法比較多,可以使用第三方的個人防火牆,這里只介紹Windows自帶的防火牆設置方法。
1.利用TCP/IP篩選功能
在Windows 2000和Windows XP中,系統都帶有TCP/IP篩選功能,利用它可以簡單地進行埠設置。以Windows XP為例,打開本地連接的屬性,在常規選項中找到Internet協議(TCP/IP),雙擊它打開該協議的屬性設置窗口。點擊右下方的高級按鈕,進入高級TCP/IP設置。在選項中選中TCP/IP篩選並雙擊進入其屬性設置。這里我們可以設置系統只允許開放的埠,假如架設的FTP伺服器埠為21,先選中啟用TCP/IP篩選(所有適配器),再在TCP埠選項中選擇只允許,點添加,輸入埠號21,確定即可。這樣,系統就只允許打開21埠。要開放其他埠,繼續添加即可。這可以有效防止最常見的139埠入侵。缺點是功能過於簡單,只能設置允許開放的埠,不能自定義要關閉的埠。如果你有大量埠要開放,就得一個個地去手工添加,比較麻煩。
2.打開Internet連接防火牆
對於Windows XP系統,自帶了Internet連接防火牆功能,與TCP/IP篩選功能相比,設置更方便,功能更強大。除了自帶防火牆埠開放規則外,還可以自行增刪。在控制面板中打開網路連接,右擊撥號連接,進入高級選項卡,選中通過限制或阻止來自Internet的對此計算機的訪問來保護我的計算機和網路,啟用它。系統默認狀態下是關閉了FTP埠的,因而還要設置防火牆,打開所使用的FTP埠。點擊右下角的設置按鈕進入高級設置,選中FTP伺服器,編輯它。由於FTP服務默認埠是21,因而除了IP地址一欄外,其餘均不可更改。在IP地址一欄中填入伺服器公網ip,確定後退出即可即時生效。如果架設的FTP伺服器埠為其他埠,比如22,則可以在服務選項卡下方點添加,輸入伺服器名稱和公網IP後,將外部埠號和內部埠號均填入22即可。
三、對IIS、Serv-u等伺服器軟體進行設置
除了依靠系統提供的安全措施外,就需要利用FTP伺服器端軟體本身的設置來提高整個伺服器的安全了。
1.IIS的安全性設置
1)及時安裝新補丁
對於IIS的安全性漏洞,可以說是有口皆碑了,平均每兩三個月就要出一兩個漏洞。所幸的是,微軟會根據新發現的漏洞提供相應的補丁,這就需要你不斷更新,安裝最新補丁。
2)將安裝目錄設置到非系統盤,關閉不需要的服務
一些惡意用戶可以通過IIS的溢出漏洞獲得對系統的訪問權。把IIS安放在系統分區上,會使系統文件與IIS同樣面臨非法訪問,容易使非法用戶侵入系統分區。另外,由於IIS是一個綜合性服務組件,每開設一個服務都將會降低整個服務的安全性,因而,對不需要的服務盡量不要安裝或啟動。
FTP最大的安全漏洞在於其默認傳輸密碼的過程是明文傳送,很容易被人嗅探到。而IIS又是基於Windows用戶賬戶進行管理的,因而很容易泄漏系統賬戶名及密碼,如果該賬戶擁有一定管理許可權,則更會影響到整個系統的安全。設置為只允許匿名連接,可以免卻傳輸過程中泄密的危險。進入默認FTP站點,在屬性的安全賬戶選項卡中,將此選項選中。
4)謹慎設置主目錄及其許可權
IIS可以將FTP站點主目錄設為區域網中另一台計算機的共享目錄,但在區域網中,共享目錄很容易招致其他計算機感染的病毒攻擊,嚴重時甚至會造成整個區域網癱瘓,不到萬不得已,最好使用本地目錄並將主目錄設為NTFS格式的非系統分區中。這樣,在對目錄的許可權設置時,可以對每個目錄按不同組或用戶來設置相應的許可權。右擊要設置的目錄,進入共享和安全→安全中設置,如非必要,不要授予寫入許可權。
5)盡量不要使用默認埠號21
啟用日誌記錄,以備出現異常情況時查詢原因。
2.Serv-u的安全性設置
與IIS的FTP服務相比,Serv-u在安全性方面做得比較好。
1)對本地伺服器進行設置
首先,選中攔截FTP_bounce攻擊和XP。通常,當使用FTP協議進行文件傳輸時,客戶端首先向FTP伺服器發出一個PORT命令,該命令中包含此用戶的IP地址和將被用來進行數據傳輸的埠號,伺服器收到後,利用命令所提供的用戶地址信息建立與用戶的連接。大多數情況下,上述過程不會出現任何問題,但當客戶端是一名惡意用戶時,可能會通過在PORT命令中加入特定的地址信息,使FTP伺服器與其它非客戶端的機器建立連接。雖然這名惡意用戶可能本身無權直接訪問某一特定機器,但是如果FTP伺服器有權訪問該機器的話,那麼惡意用戶就可以通過FTP伺服器作為中介,仍然能夠最終實現與目標伺服器的連接。這就是FXP,也稱跨伺服器攻擊。選中後就可以防止發生此種情況。
其次,在高級選項卡中,檢查加密密碼和啟用安全是否被選中,如果沒有,選擇它們。加密密碼使用單向Hash函數(MD5)加密用戶口令,加密後的口令保存在ServUDaemon。ini或是注冊表中。如果不選擇此項,用戶口令將以明文形式保存在文件中:啟用安全將啟動Serv-u伺服器的安全成功。
2)對域中的伺服器進行設置
前面說過,FTP默認為明文傳送密碼,容易被人嗅探,對於只擁有一般許可權的賬戶,危險並不大,但如果該賬戶擁有遠程管理尤其是系統管理員許可權,則整個伺服器都會被別人遠程式控制制。Serv-u對每個賬戶的密碼都提供了以下三種安全類型:規則密碼、OTP S/KEY MD4和OTP S/KEY MD5。不同的類型對傳輸的加密方式也不同,以規則密碼安全性最低。進入擁有一定管理許可權的賬戶的設置中,在常規選項卡的下方找到密碼類型下拉列表框,選中第二或第三種類型,保存即可。注意,當用戶憑此賬戶登錄伺服器時,需要FTP客戶端軟體支持此密碼類型,如CuteFTP Pro等,輸入密碼時選擇相應的密碼類型方可通過伺服器驗證。
與IIS一樣,還要謹慎設置主目錄及其許可權,凡是沒必要賦予寫入等能修改伺服器文件或目錄許可權的,盡量不要賦予。最後,進入設置源碼天空