1. 程式人生 > >編寫ftp客戶端連線linux自帶ftp服務vsftpd中遇到的問題

編寫ftp客戶端連線linux自帶ftp服務vsftpd中遇到的問題

背景知識:

          vsftpd:是linux自動的ftp伺服器。

         檢視狀態 service vsftpd status, 啟動:service vsftpd start 停止:service vsftpd stop

         配置檔案:/etc/vsftpd/vsftpd.conf   關鍵項:ascii_upload_enable=YES   ascii_download_enable=YES//使用assci傳輸還是bin傳輸

                     ascii傳輸會將換行符進行轉換,bin傳輸所有位元組不變動。

                                           日誌配置:xferlog_file=/var/log/xferlog   xferlog_enable=YES  xferlog_std_format=YES,開啟將在/var/log中有xferlog 日誌否則只在message中記錄簡單

                                         登陸情況。

         =================服務端介紹完畢=======================

        編寫客戶端連線時分為主動模式(PORT)和被動模式(passive),就是ftp伺服器主動連線客戶端建立資料鏈路,還是等待客戶端連線。

      服務端預設開啟21埠,客戶端連線後作為命令鏈路,可以通過傳送PASV命令告訴服務端被動模式,則服務端會建立一個隨機埠返回給客戶端

      等待客戶端連線,主動模式則需要客戶端傳送PORT命令,告訴服務端本地的建立的埠號,由ftp服務端連線。

   ===================客戶端原理介紹完畢==============

     發生的問題是:在傳送PORT 命令時的格式,對於小段機器要傳送 PORT IP,埠低8位,埠高8位,而大端機器要傳送PORT IP,埠高8位,埠低8位

                          注意ip中的每一個位要使用,分割。組成XX,XX,XX,XX,lport,hport\r\n

                             在linux機器上我們傳輸了後面的,這樣導致我們客戶端能夠bind成功,傳送PORT埠也是成功的,但是服務總是返回連線無法建立的情況(425)。

                              當然這種情況還要考慮防火牆iptables,看是否服務端能夠連線到這個埠。

                       所以在以後的問題中一定要注意大端小段的問題。

                      傳送的每個命令都要加上\r\n ,如"list \r\n",返回檔案列表

     主動模式: ftp服務端主動連線客戶端埠,會引起無法控制的風險。

     被動模式:客戶端連線服務端埠,服務只需要開放有限埠,資料責任有客戶端負責。