13

LFTP を使用してサーバーからファイルを転送していますが、残念ながら PORT コマンドを認識しません。私はサーバーを制御できず (サーバーの詳細がわかりません)、アクティブ モードを使用する必要があります。

これは次のようなコマンド ラインです。

lftp -e 'debug 10;set ftp:passive-mode off; set ftp:auto-passive-mode no; ls; bye;' -u user,password ftp://ftp.site.com

これはデバッグ出力です:

<--- 200 Using default language en_US
---> OPTS UTF8 ON
<--- 200 UTF8 set to on           
---> OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
<--- 200 OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
---> USER xxxxx
<--- 331 Password required for xxxxx
---> PASS xxxxxx
<--- 230 User xxxxx logged in     
---> PBSZ 0
<--- 200 PBSZ 0 successful               
---> PROT P
<--- 200 Protection set to Private       
---> PORT 172,16,133,11,146,168
<--- 500 Illegal PORT command                    
---> LIST
---> ABOR
---- Closing aborted data socket
---- Chiusura del socket di controllo

リモートサーバーがPORTコマンドをサポートしていないため、LFTPはデータソケットへの接続を放棄しているようです。LFTP が引き続きポート 20 に接続できることを確認する方法はありますか? FTP マニュアルでは明らかに問題ありません。

4

1 に答える 1

7

問題は、FTP サーバーがPORTコマンドをサポートしていない (サポートしている) ことではなく、FTP クライアントがPORTコマンドで送信している IP アドレス/ポートが気に入らないことだと思います。

PORT 172,16,133,11,146,168

...アドレス 172.16.133.11、ポート 37544* に接続するようにサーバーに指示します。ここで興味深いのは IP アドレスです。これは RFC 1918 アドレスです (つまりプライベート ネットワーク アドレスです)。これは、FTP クライアントがどこかの LAN にあり、パブリックIP アドレスを使用して FTP サーバーに接続していることを示唆しています。

そのリモート FTP サーバーはプライベート ネットワーク アドレスに接続できません。定義上、RFC 1918 アドレスはパブリックにルーティングできません。

したがって、FTP サーバーがコマンドで指定されたアドレス/ポートに接続しようとして失敗する可能性が非常に高いため、FTP サーバーはPORT次のようにコマンドに失敗します。

500 Illegal PORT command

その FTP サーバーでコマンドを機能させるには、クライアント マシンに到達するために、そのサーバーが接続できるパブリックPORTIP アドレスを検出する必要があります。この住所が であるとしましょう。次に、オプションを使用して、コマンドでそのアドレスを使用するように指示する必要があります。1.2.3.4lftpPORTftp:port-ipv4

ただし、パブリック IP アドレスが NAT/ルーター/ファイアウォールのアドレスであり、NAT/ルーター/ファイアウォールが外部から大きな番号のポート (37544 など) への接続をルーティングできない可能性があります。 LAN内のマシンに。これは、アクティブなFTP データ転送、つまりPORT(または) コマンドを使用する FTPデータ転送の問題の 1 つですEPRT。それらは「ファイアウォールに優しい」とは見なされません。

お役に立てれば!


* -146,168ポート 37544 に変換されるのはなぜですか?

FTP のRFC959によると、これらのパラメータは次のとおりです。

(...) 16 ビットの TCP ポート アドレス。このアドレス情報は 8 ビットのフィールドに分割され、各フィールドの値は 10 進数 (文字列表現) として送信されます。

146 dec = 10010010 bin = A
168 dec = 10101000 bin = B

    A        B
10010010 10101000 bin = 37544 dec
于 2016-01-06T00:24:51.900 に答える