DOBON.NET DOBON.NETプログラミング掲示板過去ログ

FTPでポート変更があった場合

環境/言語:[VB2005 .NET Framework2.0]
分類:[.NET]

自作のVBアプリから楽天GOLDのFTPサーバーへ接続していたのですが、
ポート番号が16910に変更になるとのアナウンスがあり、
以下のように書き換えました。

Try
'アップロード先のURI
Dim u As New Uri("ftp://ftp.rakuten.ne.jp:16910/")

Dim wc As New WebClient()
wc.Credentials = New NetworkCredential("user", "pass")
wc.UploadFile(u, "c:\test.txt")

'解放する
wc.Dispose()

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

しかし、「サーバーはPASVコマンドへの応答で、FTP接続が確立されたアドレスとは異なるアドレスを返しました」というエラーが表示されます。

今現在、楽天のサーバーは21番と16910番、両方のポートを使用しているのが原因かもしれないのですが、どなたか原因をご存じではありませんか?

よろしくお願い申し上げます。
■No24575に返信(じゅんさんの記事)
> 自作のVBアプリから楽天GOLDのFTPサーバーへ接続していたのですが、
> ポート番号が16910に変更になるとのアナウンスがあり、

  http://dobon.net/vb/dotnet/internet/ftpwebrequest.html

  こちらの方法を使う必要があると思いますが・・・

※ この掲示板のサイトのTipsは確認済み?

以上。参考まで
書き込みありがとうございます。
そちらの方法でもポート番号の指定は同じですよね?
全く同じ症状でした。
明日になれば16910ポートだけになるらしいので、明日様子を見ることにします。

■No24576に返信(オショウさんの記事)
> ■No24575に返信(じゅんさんの記事)
>>自作のVBアプリから楽天GOLDのFTPサーバーへ接続していたのですが、
>>ポート番号が16910に変更になるとのアナウンスがあり、
>
>   http://dobon.net/vb/dotnet/internet/ftpwebrequest.html
>
>   こちらの方法を使う必要があると思いますが・・・
>
> ※ この掲示板のサイトのTipsは確認済み?
>
> 以上。参考まで
■No24592に返信(じゅんさんの記事)
> 書き込みありがとうございます。
> そちらの方法でもポート番号の指定は同じですよね?
> 全く同じ症状でした。
> 明日になれば16910ポートだけになるらしいので、明日様子を見ることにします。

  いつも思いますが、どうして差があるのかないのか
  ご自身で読解されないのでしょう・・・

  それにFTPでのPASVであるかないか・・・
  FTPの仕組みを知らないで、解決できるわけがない。

以上。
大変失礼しました。

全く知識が足りないようです。
相手のサーバーはPASVモードで接続するように指定されているのですが

ftpReq.UsePassive = Trueでもfalseでもエラーがでる状態です。

PASVモードについてもう少し調べてみます。


>   いつも思いますが、どうして差があるのかないのか
>   ご自身で読解されないのでしょう・・・
>
>   それにFTPでのPASVであるかないか・・・
>   FTPの仕組みを知らないで、解決できるわけがない。
>
> 以上。
FTPの仕組みがどうこうというよりも
楽天GOLDサーバーと.Net Framework2.0のFtpWebRequestでつながらないという限定的なことだったようです。試しに自前のサーバー(CentOS/ProFTPd)のポートを変更しても全く同じソースコードでPASVモードでつながりました。
で、結局は優秀な方が作られたクラスライブラリを使うことで接続できました。

http://uwa.potetihouse.com/library/tkfpdll.html

この掲示板は役に立ちませんでしたが、他に同じ悩みで困ってる人もいるかもしれないので念のため。
解決済み!
■No24603に返信(じゅんさんの記事)
> 楽天GOLDサーバーと.Net Framework2.0のFtpWebRequestでつながらないという限定的なことだったようです。
例外のメッセージにあるように、FTPサーバーの接続先のIPアドレスと、PASVコマンドで帰ってくるIPアドレスが異なると言うことだったんでしょうか?
このあたりは"楽天GOLDサーバー"と言われるサービスに接続できないと分からないかと思います。

接続先IPアドレスと、PASVコマンドで帰ってくるIPアドレスが異なる場合にFtpWebRequestが接続できないのはセキュリティ上の仕様だそうです。
従って、.NET Frameworkの標準のクラスでは実現できないかと思われます。

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=97409


> で、結局は優秀な方が作られたクラスライブラリを使うことで接続できました。
> http://uwa.potetihouse.com/library/tkfpdll.html
ということで、この解決法になるのは致し方ないと思います。

> この掲示板は役に立ちませんでしたが、他に同じ悩みで困ってる人もいるかもしれないので念のため。
お気持ちは分かりますが、前半の一言は飲み込みましょう。
探してきた人にとっても、気分を害するものになるかもしれませんので。


■No24593に返信(オショウさんの記事)
> それにFTPでのPASVであるかないか・・・
> FTPの仕組みを知らないで、解決できるわけがない。
上記のように、FTPの仕組みを知っていても解決できないケースはあります。
「できるわけがない」というのはきつい表現と(少なくとも私は)思いましたので、もう少し自重しませんか?
解決済み!
2009/05/22(Fri) 04:51:11 編集(投稿者)

Azuleanさん、適切なご指摘、ありがとうございました。

> この掲示板は役に立ちませんでしたが、他に同じ悩みで困ってる人もいるかもしれないので念のため。

これはこのサイトの管理人である私の責任ですので、お役に立てずに、申し訳ないです。ただ、他の投稿者と閲覧者の方々に対する非難ととらえられてしまうかもしれませんので、書き方にもう少し気を使われた方がよかったのではないでしょうか。

また、 No24593 のオショウさんの投稿についてですが、回答というよりも、戒めや批判の意味合いが濃いように思われます。その境界はあいまいですので、それが一概に悪いとは言いません。しかし、相手を怒らせてしまうのでは注意した意味がなくなってしまうどころか、それ以下になってしまうかもしれません。このように相手を怒らせてしまうかもしれないようなことを指摘する際は、できるだけ相手に怒らせる隙を与えないような書き方でお願いできないでしょうか?(これは難しいと思いますので、質問者を注意せずに無視していただいて構いません。)

さらに付けくわえさせていただきますと、「書き込みのルールについて」の「できるだけ丁寧な言葉遣いでお願いします」というルールに違反しているのでは?と思われても仕方がないような表現になっている点も、他の人から見て納得のできない要因の一つになっているような気がします。面倒とは思いますが、この点も合わせて、お願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板