透過C# FtpClient 函式庫上傳CSV檔案到遠端FTP空間
FtpClient client = new FtpClient();
client.Host = "xx.xx.xx.xx";
client.Credentials = new NetworkCredential(UserName, Password);
client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
client.Connect();
if (client.IsConnected)
{
Console.WriteLine("Connected");
client.DataConnectionEncryption = true;
var result = client.GetFilePermissions("/Test.txt");
client.UploadFile(@"C:\Users\Desktop\Test.txt", "/Test.txt");
}
else
{
Console.WriteLine("No Connetion");
}
但當程式到了以下程式碼client.GetFilePermissions("/Test.txt");
會出現以下錯誤
Unable to read data from the transport connection: An attempt was made to access a socket in a way forbidden by its access permissions.
但當我防火牆全關時候,檔案是可以順利上傳遠端FTP的
目前防火牆設定例外
(Inbound)
Local port 3072,80,20,21,1023
Remote port 3072,80,20,21,1023
(Outbound)
Local port 3072,80,20,21,1023
Remote port 3072,80,20,21,1023
因此想問的是防火牆的inbound 或outbound要怎麼設定才能讓上傳檔案到遠端的FTP
打開 port 20,21試試看
請先確認你用的是 FTP Active 還是 FTP Passive 傳輸?
http://blog.miniasp.com/post/2008/06/29/FTP-Protocol-Definitive-Explanation.aspx
這兩種模式開 Port 的方法是不一樣的....
請問~ 確認我用的是 是指 我的程式使用的模式嗎?
或是我IIS所在的作業系統所使用模式呢?
兩邊都要配合...
Server 設定成 Passvie, Client 用 Active 就打不開
Server 設定成 Active, Client 用 Passive 也打不開
對方使用是Passive
而我設FtpWebRequest.isPassive = true
也是連不上...
您可以參考這邊比對, 對方是否真的開啟了 Passive:
http://blog.xuite.net/ganpin917/home/52930403-%5B%E8%BD%89%E8%BC%89%5DActive+FTP+%E5%8F%8A+Passive+FTP
此外, 你的防火牆必須能夠支援 FTP Passive 的自動反向連線, 否則當對方 Server 要連回來你這邊的時候, 如果防火牆不知道這是 FTP 的 data port, 他就不會自動幫你 forward.
或者是你開啟這樣的 local port mapping: 1024~65535 inbound, 雖然很危險, 但至少這樣可以確保反向一定可以連得回來
想問一下 因為目前我測試環境是Win10
而遠端當伺服器的是Win7
如果我是用Win server會不會就沒有防火牆擋FTP的問題?