Win7 內建 ftp.exe 連線伺服器後,dir 或 ls 無法顯示檔案清單(卡住/逾時),但 IE 瀏覽 ftp:// 正常。主因:Windows 防火牆預設阻擋 FTP 主動模式資料連線埠(伺服器主動連回客戶端隨機高埠)。
| 方案 | 指令/操作 | 優點 | 缺點 |
|---|---|---|---|
| 關閉防火牆 | 控制台 → 防火牆 → 關閉 | 最簡單 | 安全性極差,不建議 |
| 入站規則允許 ftp.exe | 進階設定 → 入站規則 → 新增規則 → 程式 ftp.exe → 允許 | 精準放行 | 需手動設定 |
| netsh 指令允許 ftp.exe + 停用 Stateful FTP 過濾 | 見下方指令 | 可腳本化、部署快 | 需管理員權限 |
以系統管理員身分開啟命令提示字元執行:
netsh advfirewall firewall add rule name="FTP Client (non-SSL)" program="%systemroot%\system32\ftp.exe" action=allow protocol=TCP dir=in
netsh advfirewall set global StatefulFtp disable
ftp.exe 建立入站允許規則,放行 FTP 指令通道(埠 21)回應封包。實測 ftp.exe 主動模式資料連線使用的本地埠非固定 21,而是隨機高埠(如 50000+)。tasklist 找 PID → netstat -ano 確認連線埠,證實非 21。故指定程式路徑而非埠號才能精準放行。


service=ftpsvc 僅適用於 IIS FTP 服務,不適用客戶端 ftp.exe。StatefulFtp enable 會加劇問題,必須 disable。quote PASV) 可繞過此問題,但非所有伺服器支援。重新執行 ftp → open → dir 應即時顯示檔案清單,不再卡住。
兩條 netsh 指令精準解決 Win7 FTP 客戶端資料連線被防火牆阻擋,可納入部署腳本自動化配置。