<span><span>--------------------------------------------------
အသုံးပြု ftp_pasv နာရီ,FTP အမှားအယွင်းမရှိစေရန်ဆာဗာကိုမည်သို့ပြင်ဆင်ရမည်နည်း?တစ် ဦး ကအကျဉ်းရှင်းပြချက်
--------------------------------------------------
တည်နေ PHP အလယ်ပိုင်းအသုံးပြု ftp_pasv passive mode ကို enable functions(Passive Mode)ဆက် FTP ဆာဆာနာရီ,常常会遇到ဆက်失败或数据传输အလယ်ပိုင်း断的问题。ဤသည်အဓိကအားဖြင့်ကြောင့်ဖြစ်သည် FTP ဆာဗာ configuration သည်ကွန်ယက်ပတ်ဝန်းကျင်နှင့်မကိုက်ညီပါ,ဖောက်သည်အားဒေတာရုပ်သံလိုင်းကိုမှန်ကန်စွာတည်ဆောက်ရန်ပျက်ကွက်စေသည်。本文将详细说明အသုံးပြု ftp_pasv နာရီ,FTP ဆာဗာကို configure လုပ်နည်း,才能保证ဆက်稳定、Mootch ဂီယာ。
တစ်、FTP Active Mode နှင့် passive mode ၏အကျဉ်းချုပ်ဖော်ပြချက်
FTP ဆက်由控制ဆက်和数据ဆက်组成。တက်ကြွ mode ကို(Active Mode)အလယ်ပိုင်း,ဖောက်သည်ကဆာဗာကိုပြောပြသည်IPနှင့် ports,ဆာဆာ主动ဆက်客户端进行数据传输;Passive Mode(Passive Mode)ဆာဗာသည် client ကို data port ကိုပြောပြသည်,客户端主动ဆက်ဆာဆာ。Passive Mode通常适合客户端处于防火墙或NAT环境နာရီအသုံးပြု。
နှစ်、为什么အသုံးပြု ftp_pasv?
တည်နေ现代网络环境အလယ်ပိုင်း,ဖောက်သည်များမကြာခဏ firewalls သို့မဟုတ် router များ၏နောက်ကွယ်မှတည်ရှိသည်,တက်ကြွ mode ကိုဆက်因被动防火墙阻挡而失败。ဖွင့်လှစ် ftp_pasv Passive Mode后,ဖောက်သည်များသည်ဤကန့်သတ်ချက်များကိုရှောင်ကွင်းနိုင်သည်,主动ဆက်ဆာဆာ指定的端口进行数据传输,ဤသည်အောင်မြင်မှုနှုန်းတိုးတက်လာသည်。
သုံး、FTP ဆာဗာကို configure လုပ်နည်း?
</span><span><span class="hljs-number">1</span></span><span>. **配置Passive Mode端口范围**
ဆာဆာ必须设置တစ်段专用的端口范围供Passive Modeအသုံးပြု,ဥပမာအားဖြင့် </span><span><span class="hljs-number">50000</span></span><span>-</span><span><span class="hljs-number">51000</span></span><span>。
- တည်နေ vsftpd အလယ်ပိုင်း,configuration file ကိုများသောအားဖြင့်ဖြစ်ပါတယ် `/etc/vsftpd/vsftpd.conf`,ထည့်သွင်းသို့မဟုတ်ပြုပြင်မွမ်းမံ:
```conf
pasv_min_port=</span><span><span class="hljs-number">50000</span></span><span>
pasv_max_port=</span><span><span class="hljs-number">51000</span></span><span>
</span></span>
ProfTPD နှင့် Pure-ftpd ကဲ့သို့သောအခြား FTP ဆာဗာများတွင်လည်းအလားတူပြင်ဆင်မှုများရှိသည်။
Open Firewall Port ကိုဖွင့ ်ပါ passive mode data port range (အထက်ပါဥပမာတွင် 50000-51000 ကဲ့သို့သော 50000-51000) ကိုဆာဗာ Firewall တွင်ဖြန့်ချိရမည်။ ဒီလိုမှမဟုတ်ရင် client ဟာဒီ ports တွေကိုချိတ်ဆက်လို့မရဘူး,
ဥပမာ Iptables ကို အသုံးပြုခြင်း,
<span><span>iptables -I INPUT -p tcp --match multiport --dports 50000:51000 -j ACCEPT
</span></span>
အကယ်. သင်သည် firewalld သို့မဟုတ်အခြား firewall software ကိုအသုံးပြုပါကသက်ဆိုင်ရာ configuration ကိုလည်းလိုအပ်သည်။
ဆာဗာ၏အများပြည်သူဆိုင်ရာအိုင်ပီကိုသတ်မှတ်ပါ
ဆာဗာသည်များသောအားဖြင့်အများအားဖြင့် intranet တွင်တည်ရှိပြီးနတ်ကိုအသုံးပြုသည်။
VSFTPD တွင်, configure:
<span>pasv_address=သင်၏အများဆိုင်ကွန်ယက်IPစကားပေြာဟော
</span>
ဒီလိုမှမဟုတ်ရင် client ဟာ Intranet IP ကိုရပြီးဒေတာဆိပ်ကမ်းကိုဆက်သွယ်လို့မရဘူး။
connection timeout နှင့်အများဆုံးဆက်သွယ်မှုအရေအတွက် configure အချိန်မတန်မီဆက်သွယ်မှုပြတ်တောက်ခြင်းသို့မဟုတ်ဆာဗာအရင်းအမြစ်ရှားပါးမှုကိုရှောင်ရှားရန်အချိန်ကုန်ချိန်ညှိချက်များနှင့်အမြင့်ဆုံးဆက်သွယ်မှုကိုသင့်လျော်စွာရေတွက်ပါ။
4 ။ PHP Code နမူနာများအောက်ပါအချက်များသည် passive mode ကိုဖွင့ ်. ဖိုင်များကိုတင်ခြင်း၏ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">"ftp.example.com"</span></span><span>;
</span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">"username"</span></span><span>;
</span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">"password"</span></span><span>;
</span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">"/path/to/local/file.txt"</span></span><span>;
</span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">"file.txt"</span></span><span>;
</span><span><span class="hljs-comment">// ဆက် FTP</span></span><span>
</span><span><span class="hljs-variable">$conn_id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ftp_connect</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$conn_id</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"无法ဆက် FTP ဆာဆာ"</span></span><span>);
}
</span><span><span class="hljs-comment">// လော့ဂ်အင်</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ftp_login</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$ftp_user</span></span><span>, </span><span><span class="hljs-variable">$ftp_pass</span></span><span>)) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTP လော့ဂ်အင်失败"</span></span><span>);
}
</span><span><span class="hljs-comment">// ဖွင့်လှစ်Passive Mode</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_pasv</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// ဖိုင်တင်ပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ftp_put</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>, </span><span><span class="hljs-variable">$remote_file</span></span><span>, </span><span><span class="hljs-variable">$local_file</span></span><span>, FTP_BINARY)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အောင်မြင်စွာတင်ပါ"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"တင်ပါးမအောင်မြင်ပါ"</span></span><span>;
}
</span><span><span class="hljs-comment">// 关闭ဆက်</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ftp_close</span></span><span>(</span><span><span class="hljs-variable">$conn_id</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
5. အကျဉ်းချုပ် FTP_PASV ကိုသုံးသောအခါ, သော့သည် passive mode port port range, firewall range နှင့် Public Network IP လိပ်စာများကိုမှန်ကန်စွာ configure လုပ်ရန်ဖြစ်သည်။ သူတို့ထဲမှတစ်ယောက်မှပျောက်ဆုံးနေသည်မဟုတ်ရင်ဖောက်သည်သည်ဒေတာဆက်သွယ်မှုကိုမှန်ကန်စွာတည်ဆောက်နိုင်မည်မဟုတ်ပါ။ ဆာဗာကိုကျိုးကြောင်းဆီလျော်စွာ configure လုပ်ထားသရွေ့ FTP passive modes ရှိဆက်သွယ်မှုအမှားများကိုရှောင်ရှားနိုင်သည်။
ဤဆောင်းပါး၏ရှင်းလင်းချက်ကိုရှင်းပြခြင်းအားဖြင့်သင်သည် FTP passive mode configuration ကိုရှင်းလင်းစွာနားလည်နိုင်ပြီးတည်ငြိမ်ပြီးထိရောက်သောဖိုင်လွှဲပြောင်းမှုကိုသေချာစေရန်အမှန်တကယ်စီမံကိန်းများတွင် FTP_PASV ကိုချောချောမွေ့မွေ့သုံးနိုင်သည်ဟုကျွန်ုပ်ယုံကြည်သည်။
<span></span>