2011-11-16 70 views
2

要儘量簡短自定義FTP客戶端PASV數據連接被拒絕

我已經使用c#.net 3.5編寫了自定義FTP實現。系統使用TcpClient(主動模式的TcpListener)來管理連接。在單個實例中獲得了奇怪的行爲,我想問一下可能的原因。

客戶本身在內部工作很好,我們的客戶很大一部分都滿意。但是,我們有一個我無法弄清楚的問題。我已經發送wireshark的痕跡,但沒有真正的喜悅。客戶端機器落後於我認爲(從客戶描述)成爲大型網絡基礎架構。從網絡外部,到同一臺服務器的連接就像一個魅力。這是我所看到的。

在我的客戶端工作在被動模式下,tcp握手請求將發送出去以進行數據連接(服務器進入被動模式並指定端口),但從未被確認。這會導致重試和最終超時。

使用Filezilla(以及Windows資源管理器和IE ...)客戶端,再次使用被動模式時,連接不會發生問題。令人煩惱的是,這導致客戶和我的老闆指責代碼。

通過wireshark跟蹤我看不到任何TCP幀之間的差異。所有控制連接都擊中端口21,並在兩種情況下都得到確認。標誌是相似的。同樣的情況適用於數據連接,除非它是一個高數字端口52000+(但是在我的蹤跡中不同)。

當我們開始進入較低級別的協議問題並且我對大型網絡警告的理解非常有限時,我並不是網絡編程的專家。作爲開發人員,我立即喊出「防火牆問題」,但這並不能爲任何人解決任何問題。

要最終確定,是否有人知道會導致這種行爲的硬件/防火牆?我懷疑在應用程序級別阻止了流量,但您永遠不知道。

感謝您的閱讀。

+1

這引出了一個問題:爲什麼你自己的FTP實現已經有很多了? –

+0

一個很好的問題,2個原因。第1位:作爲一般規則,部門對第三方庫感到不滿(微軟的FtpWebRequest是垃圾)。第二:我們希望靈活地將代理支持納入客戶反饋。 – Gusdor

回答

0

嗯,照耀我的鞋。你會相信嗎?原來這可能是用戶錯誤。

懸而未決的一個大問題是'爲什麼filezilla和windows工作,但是你的軟件不能'。那麼我終於從服務器端獲得了一些事情來告訴我發生了什麼事情。

似乎filezilla和窗戶回落到活動模式,但沒有告訴你。由於端口20(被動模式,控制主機端口)和21(主動模式,客戶端數據端口)衆所周知,因此網絡硬件可能允許它(並且通常會這樣做,而不管防火牆設置如何)。

但是,我們的軟件不會自動回退到主動模式,因爲作爲一個功能它不被FTP圈推薦。相反,主動模式是設置連接時選擇的獨立選項。奇怪的是,這是外出的客戶端握手請求正在被防火牆攔截,但陌生的事情發生了。我要去洗這個手,並且可能會把這個自動回退到我們的客戶端。

編輯:葉,用戶在他們的網絡上有一個代理,他們沒有告訴我們。聽起來pebcak警報!

相關問題