「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>通信技術]]
-戻る
--[[通信技術]]
--[[ネットワークの基礎編]]

* 目次 [#k9879034]
#contents

*概要 [#o2c4986c]
-インターネット初期の頃から存在するプロトコル
-任意のホスト間のファイル転送を行うことが可能
-通常は接続したクライアントとサーバ(FTPサーバ)間の転送に利用される。

*モード [#a3020171]
以下の2つのモードがある。

**アクティブ [#i3884299]
inboundを受け入れないF/Wと相性が悪く、最近は使用されていない。

-クライアント → サーバ~
クライアントがサーバへ待ち受けIPアドレスとポート番号を通知

-サーバ → クライアント

--サーバがクライアントから通知された~
IPアドレスのポート番号へコネクションを確立しに行く。

--ポート番号が毎回異なるので、ファイアウォール、[[NAPT>ネットワーク機器一覧#x06ef648]]を使った環境では、~
場合によってはうまく接続できないこともある。 この場合は[[パッシブモード>#vf92b853]]を用いる。

**パッシブ [#vf92b853]
こちらも、イントラ → クラウド環境での接続では、~
サーバー側の[[NAPT>ネットワーク機器一覧#x06ef648]]と相性が悪くサーバー側に設定が必要になる。

-クライアント → サーバ~
サーバがクライアントへ待ち受けポート番号を通知する。

-サーバ → クライアント~
待ち受けポート番号の通知を受けたクライアントがサーバにコネクションを確立しに行く。

*セキュアなFTP [#c974e1bb]
FTPは、セキュア(安全)なプロトコルとして設計されていないため、~
インターネット回線を経由するケースなど、[[FTPS>#e3387a98]]、[[SFTP>#k89c7dd5]]が利用されるようになった。

**FTPS [#e3387a98]
***概要 [#e106067f]
-FTPで送受信するデータをTLSまたはSSLで暗号化する通信プロトコル。
-Well-known Portは、990/tcp(IISのFTPSは、port 21をFTPと共有)。
-RFC 2228, 4217 で標準化されている。

***モード [#ra2e6c03]
-Explicitモード
--STARTTLS(平文の通信プロトコルを暗号化通信に拡張する方法)
--認証コマンド実行後に暗号化通信を開始する。
--認証コマンドを実行しなければ通常のFTPとして機能する。

-Implicitモード
--サーバ接続開始時点から暗号化通信を開始する。
--クライアントはサーバが採用している暗号化プロトコルに~
適合したFTPSクライアントソフトを使用する必要がある。 
--RFC 4217ドラフトは削除されており、現在、正式なRFCとして掲載されていない。

**SFTP [#k89c7dd5]
-Secure Shell([[SSH]])上でSFTPコマンドを実行してファイル転送する。
-ただし、SFTPコマンドはFTPコマンドとはまったく別物。

*FTPS vs SFTP [#nf560911]
**FTPS [#had22e90]

***メリット [#b07b451a]
-ASCII/BINARY モードのサポート
-フォルダ単位での転送

***デメリット [#k3c94aad]
サーバ側でSSL証明書の購入コストが発生~
※ ワイルドカード証明書でWebサイトと共通可能。

**SFTP [#oa45ef7a]
***メリット [#j4dcf2c2]
***デメリット [#lfff24e3]

*クライアント [#g210f8f1]

**ツール [#f6ad6546]

***FFFTP [#re40eea3]
-日本製のFTPクライアント
-FTPSなどのサポートも加えられるなどメンテも続いていた。
-しかし、[[WinSCP>#j6f8c7cd]]の隆盛に従い、二代目開発者氏曰く、~
最終バージョン2.00のリリースで開発の終了を検討しているもよう。

***FileZilla [#i1a498d1]
成果物は、クライアントとサーバーの両方がある。

-クライアント
--Windows、Linux、macOS
--FTP、SFTP、FTPS(FTP over SSL/TLS)

-サーバー
--FTPと FTP over SSL/TLS をサポート
--クライアントと異なり、Windowsだけサポート。

***WinSCP [#j6f8c7cd]
-オープンソースで開発されている~
FTP/SFTP/SCPクライアントソフト。

-こちらが主流になりそう。

**ライブラリ [#tfe69fdd]

***WinInet [#c9503825]
-インターフェイスを確認すると、Win32のDLL(COMではない)。
-System32の下に、存在するwininet.dllが、WinInetに該当する模様。

-参考
--Win32 インターネット拡張機能 (WinInet) | Microsoft Docs~
https://docs.microsoft.com/ja-jp/cpp/mfc/win32-internet-extensions-wininet
--Implement FTP on VBA with WinInet - Qiita~
https://qiita.com/ykws/items/7c80cc4c2b646c82c010
--VB6リファレンス FTP操作(API)~
http://cya.sakura.ne.jp/vb/WinInet.htm
--FTPによるアップロード/ダウンロード(wininet.dll)(dinop.com)~
https://www.dinop.com/vc/ftp_wininet.html

***FtpWebRequest [#m061e219]
非推奨

-参考
--FtpWebRequest Class (System.Net) | Microsoft Docs~
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.ftpwebrequest

***System.Net.FtpClient [#ad9c6c1b]
[[FtpWebRequest >#m061e219]]の後継 → [[FluentFTP>#z6fc6570]]

-参考
--NuGet Gallery | System.Net.FtpClient~
https://www.nuget.org/packages/System.Net.FtpClient/

***FluentFTP [#z6fc6570]
[[System.Net.FtpClient>#ad9c6c1b]]の後継

-参考

--NuGet Gallery | FluentFTP~
https://www.nuget.org/packages/FluentFTP

--robinrodricks/FluentFTP~
https://github.com/robinrodricks/FluentFTP
> An FTP and FTPS client for .NET & .NET Standard, optimized for speed. Provides extensive FTP commands, File uploads/downloads, SSL/TLS connections, Automatic directory listing parsing, File hashing/checksums, File permissions/CHMOD, FTP proxies, FXP support, UTF-8 support, Async/await support, Powershell support and more. Written entirely in C#, with no external dependencies.~
~
 スピードのために最適化された .NET & .NET Standard 用の FTP および FTPS クライアント。豊富な FTP コマンド、ファイルのアップロード/ダウンロード、SSL/TLS 接続、自動ディレクトリリスト解析、ファイルハッシュ/チェックサム、ファイルパーミッション/CHMOD、FTP プロキシ、FXP サポート、UTF-8 サポート、Async/await サポート、Powershell サポートなどを提供します。完全に C# で書かれており、外部からの依存関係はありません。

***その他 [#h9878187]
-Free .NET FTP library~
https://enterprisedt.com/products/edtftpnet/

-Alex FTPS Client - CodePlex Archive~
https://archive.codeplex.com/?p=ftps

-.NET FTP, FTP .NET, FTP C#, FTP VB, C# FTP, VB FTP~
New improved FTP Component for .NET~
https://enterprisedt.com/general/press/20060818.html

*参考 [#q7b4867f]
-File Transfer Protocol - Wikipedia~
https://ja.wikipedia.org/wiki/File_Transfer_Protocol

-FTPS - Wikipedia~
https://ja.wikipedia.org/wiki/FTPS

-SSH File Transfer Protocol - Wikipedia~
https://ja.wikipedia.org/wiki/SSH_File_Transfer_Protocol

-c# — 無料のFTPライブラリ~
https://www.it-swarm-ja.tech/ja/c%23/%E7%84%A1%E6%96%99%E3%81%AEftp%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/967009712/

**[[クラウド環境にFTPサーバを構築する場合]] [#nf2e09d6]

----
Tags: [[:インフラストラクチャ]], [[:通信技術]], [[:Windows]], [[:IIS]]
Tags: [[:IT国際標準]], [[:インフラストラクチャ]], [[:通信技術]], [[:IIS]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS