C# การอัปโหลดไฟล์ไปยัง FTP ระยะไกลถูกห้ามโดยไฟร์วอลล์ Windows

ฉันใช้ไลบรารี C# FtpClient เพื่ออัปโหลดไฟล์ การเชื่อมต่อถูกสร้างขึ้นหลังจากที่ฉันตั้งค่าพอร์ตแบบกำหนดเอง 3072 เพราะฉันตั้งค่า client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

แต่เมื่อฉันจะผ่านไปได้

client.GetFilePermissions("/Test.txt");
client.UploadFile(@"C:\Users\Desktop\Test.txt", "/Test.txt");

มันจะแสดงข้อยกเว้นเสมอ

ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: มีความพยายามในการเข้าถึงซ็อกเก็ตในลักษณะที่ถูกห้ามโดยสิทธิ์การเข้าถึง

หากฉันปิด Windows Firewall ไฟล์ก็สามารถอัปโหลดได้สำเร็จ

ฉันต้องการทราบว่าฉันควรตั้งค่านโยบายใดบนไฟร์วอลล์ Windows เพื่อให้ฉันสัมผัสไฟล์ระยะไกลและอัปโหลดได้

การตั้งค่าไฟร์วอลล์ของฉันในปัจจุบัน:

  • (ขาเข้า)
    พอร์ตท้องถิ่น 3072,80,20,21,1023
    พอร์ตระยะไกล 3072,80,20,21,1023

  • (ขาออก)
    พอร์ตท้องถิ่น 3072,80,20,21,1023
    พอร์ตระยะไกล 3072,80,20,21,1023

รหัสที่สมบูรณ์ของฉัน

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 resutl = client.GetFilePermissions("/Test.txt");
    client.UploadFile(@"C:\Users\Desktop\Test.txt", "/Test.txt");
}
else
{
    Console.WriteLine("No Connetion");
}

person Kun-Yao Wang    schedule 22.06.2017    source แหล่งที่มา
comment
อาจมีข้อมูลที่เกี่ยวข้องบางส่วนที่นี่: serverfault.com/questions/401304/ - ลองถามคำถามบนไซต์นั้นเนื่องจากดูเหมือนว่ามีความเกี่ยวข้องมากกว่า SO   -  person PaulF    schedule 22.06.2017
comment
หากคุณเชื่อว่าเป็นปัญหาไฟร์วอลล์เท่านั้น คำถามของคุณอยู่นอกหัวข้อเกี่ยวกับ Stack Overflow ให้ย้ายไปที่ Super User - และคุณต้องแสดงไฟล์บันทึกให้เราดู และโค้ดของคุณอีกมากมาย! หรืออย่างน้อยก็บอกเราว่าคุณกำลังใช้โหมดพาสซีฟหรือแอคทีฟ   -  person Martin Prikryl    schedule 23.06.2017
comment
@MartinPrikryl ขอบคุณที่เตือน ตอนนี้ฉันบวกรหัสของฉัน ฉันไม่มีบันทึกอื่นใดนอกจากข้อความข้อยกเว้น ฉันสามารถตั้งค่ารหัส FTP ของฉันเป็นแบบพาสซีฟหรือแอคทีฟได้หรือไม่   -  person Kun-Yao Wang    schedule 23.06.2017
comment
การเชื่อมต่อเกิดขึ้นหลังจากที่ฉันตั้งค่าพอร์ตแบบกำหนดเอง 3072 เพราะฉันตั้งค่า client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; - ประโยคนั้นไม่สมเหตุสมผลสำหรับฉัน - ความสัมพันธ์ของ SslProtocols.Tls12 คืออะไร ไปยังพอร์ต 3072?   -  person Martin Prikryl    schedule 23.06.2017
comment
ฉันตั้งค่า 3072 เพราะฉันเห็นคำตอบในคำถามนี้ stackoverflow.com/questions/28286086/   -  person Kun-Yao Wang    schedule 23.06.2017
comment
ไม่มีคำว่า 3072 ว่าเป็นหมายเลขพอร์ต เป็นค่าตัวเลข Tls12 องค์ประกอบของการแจงนับ SecurityProtocolType!   -  person Martin Prikryl    schedule 23.06.2017


คำตอบ (3)


หากคุณบล็อกพอร์ตขาออก/ขาเข้าทั้งหมด ยกเว้นพอร์ตที่ระบุไว้ FTP แทบจะไม่สามารถทำงานได้

โปรโตคอล FTP ใช้ช่วงพอร์ตการเชื่อมต่อการถ่ายโอนแยกต่างหาก ทั้งขาออก (โหมดพาสซีฟที่แนะนำ) หรือขาเข้า (โหมดแอคทีฟ)

ในการตั้งค่าโหมดพาสซีฟ คุณต้องค้นหาว่าเซิร์ฟเวอร์ FTP ใช้ช่วงพอร์ตใด และเปิดใช้งานช่วงนั้นในไฟร์วอลล์

สำหรับรายละเอียด โปรดดูบทความของฉันเกี่ยวกับการตั้งค่าเครือข่ายสำหรับโปรโตคอล FTP

person Martin Prikryl    schedule 23.06.2017
comment
พวกเขาใช้เซิร์ฟเวอร์ FTP แบบพาสซีฟ ตอนนี้ฉันเปิดพอร์ตภายในเครื่องขาเข้า 1024~65535 และพอร์ตระยะไกลขาออก 21 และ 20 แต่ก็ยังใช้งานไม่ได้ - person Kun-Yao Wang; 06.07.2017
comment
โหมดพาสซีฟใช้การเชื่อมต่อขาออกเท่านั้น การเปิดพอร์ตภายในเครื่องขาเข้า 1024~65535 ไม่สมเหตุสมผล - person Martin Prikryl; 07.07.2017
comment
ฉันไม่เข้าใจความคิดเห็นของคุณ - person Martin Prikryl; 13.07.2017
comment
ฉันพบว่าฉันปิดเครือข่ายส่วนตัวเฉพาะในไฟร์วอลล์ Windows และเปิดใช้งานนโยบาย FTP ในขาเข้าและขาออกหรือไม่ ซึ่งนั่นใช้งานได้ - person Kun-Yao Wang; 13.07.2017

  • เปิดพรอมต์คำสั่งของผู้ดูแลระบบ คลิก Start คลิก All Programs คลิก Accessories คลิกขวาที่ Command Prompt จากนั้นคลิก Run as Administrator

  • รันคำสั่งต่อไปนี้:

1.netsh advfirewall firewall เพิ่มชื่อกฎ =”บริการ FTP” action=allow service=ftpsvc protocol=TCP dir=in

2.netsh advfirewall ตั้งค่าปิดการใช้งาน StatefulFTP ทั่วโลก

https://technet.microsoft.com/en-us/library/dd421710(v=WS.10).aspx

person Kun-Yao Wang    schedule 17.07.2017
comment
ซึ่งไม่สามารถช่วยเหลือเกี่ยวกับการเชื่อมต่อที่เข้ารหัส TLS/SSL ไฟร์วอลล์ไม่สามารถตรวจสอบการเชื่อมต่อที่เข้ารหัสได้ + คำตอบของคุณต้องทำงานด้วยตัวเอง แม้ว่าลิงก์จะขาดก็ตาม ดังนั้นโปรดรวมคำสั่งไว้ในคำตอบของคุณ - person Martin Prikryl; 17.07.2017
comment
แต่นั่นไม่ใช่คำถามของคุณเกี่ยวกับอะไร อย่างน้อยคำตอบของคุณควรระบุว่าคุณละทิ้งความปลอดภัย คำตอบนั้นผิดหากไม่มีข้อมูลนั้น - person Martin Prikryl; 21.07.2017

มันเป็นเซิร์ฟเวอร์ FTP แบบพาสซีฟหรือไม่? หากเป็นเช่นนั้น คุณอาจต้องเปิดพอร์ตต่างๆ ดังที่อธิบายไว้ที่นี่:

https://technet.microsoft.com/en-us/library/083f7757-ad9f-421a-9cde-7a053f3de9a6

person Manuel Fernández Santo Tomás    schedule 22.06.2017
comment
ฉันไม่สามารถตั้งค่า FTP ระยะไกลได้ ฉันคิดว่าอาจมีการตั้งค่านโยบายบางอย่างในไฟร์วอลล์ของฉันเพื่อบล็อกมัน - person Kun-Yao Wang; 22.06.2017
comment
ฉันถามพวกเขาว่าพวกเขาใช้เซิร์ฟเวอร์ FTP แบบพาสซีฟ ตอนนี้ฉันเปิดพอร์ตภายในเครื่องขาเข้า 1024~65535 และพอร์ตระยะไกลขาออก 21 และ 20 แต่ก็ยังใช้งานไม่ได้ - person Kun-Yao Wang; 06.07.2017