- PR -

FTP ルータ越えでソケットがリセットされる

1
投稿者投稿内容
エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-10-08 15:34
Socket、ServerSocketを使用して、FTPサーバー(WindowsIIS)に対して
ファイルPutを行うアプリを開発しました。
以下のリンクのまささんとまさに同じ処理手順になると思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10825&forum=12&3

これが、同一セグメント内でのテストでは正常にPutできているのですが、
グローバルセグメント上のFTPサーバーに対してファイアウォールを越えて
Putしようとした際に、"PORT xxx,xxx,xxx,xxx,zzz,zzz"コマンド送信の直後に、
ソケットがリセットされてしまいます。
PORTのパラメータとして渡しているIP(xxx.xxx.xxx.xxx)が送信元ホストの
ローカルアドレスであることは問題なのでしょうか?
因みに、FTPサーバーはWindowsIISであり、PASVモードはサポートしていません。

どなたかご教授よろしくおねがいします。
エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-10-08 16:03
補足です。

>"PORT xxx,xxx,xxx,xxx,zzz,zzz"コマンド〜

xxx,xxx,xxx,xxxは、
getLocalAddress().getHostAddress()により取得した
送信元ホストのローカルアドレス、
zzz,zzzは、
ServerSocket.getLocalPort()により取得した
ポート番号です。

失礼しました。
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-10-08 17:07
引用:

PORTのパラメータとして渡しているIP(xxx.xxx.xxx.xxx)が送信元ホストの
ローカルアドレスであることは問題なのでしょうか?



ルータが何もしてくれなければ、それが問題だと思います。
ルータによっては、PORTコマンドの中身を書き換えてくれるモノもあったりもするようですが・・・・・・。

解決策は、PASV対応のFTPサーバソフトを使うか、ルータで静的NATして、それをプログラム側でも意識するかのどちらかのような気がします。ルータでやっているのがマスカレードだときついですけどね。

あと、IISでもPASVモードは使えるようですが、どうなんでしょう。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B283679
エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-10-08 19:30
komeyさん、ありがとうございます。

>IIS ベースの FTP サービス (MSFTPSVC) では、アクティブ モードおよびパッシブ
>モード接続をサポートしています。どちらのモードを使用するかについてはクライア
>ントが指定する接続方法に依存します。ただし、IIS ではアクティブ モードまたは
>パッシブ モードを無効にすることはできません。これは、RFC 959 にそのような機
>能が存在しないためです。

データコネクションを、PASVモードで作成する方向で試しています。
しかし、"PORT〜"の代わりに"PASV"を送付することでソケットは切れなくなりましたが、
"STOR"送付後に固まってしまいます。

アクティブモードとパッシブモードではソケット作成後に必要な処理が異なるのでしょうか?
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-10-09 08:07
PORTからPASVに替えられたとのことですが、データコネクションはまだServerSocketを使用したままだったりはしないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)