- PR -

FTPのPORTで使うポート番号を取得する方法

1
投稿者投稿内容
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2002-10-31 00:30
こんにちは。ぷーちんです。

VB.NETでTcpClientとTcpListenerを使って、FTPのdirをアクティブモードで行う
メソッドを作っています。
コマンドプロンプトで FTP -d ホスト で処理を追うと以下のようになっていました。

ftp> dir
---> PORT xxx,xxx,xxx,xxx,8,234  (xxx,xxx,xxx,xxxはIPアドレス)
200 PORT command successful.
---> LIST
150 Opening ASCII mode data connection for /bin/ls.
  LISTの結果
226 Transfer complete.

dirを繰り返し行うと、PORTコマンドの最後の数字(上記だと234)がカウントアップ
されています。(255までで その前の数字も変わる)
調べたら、8 * 256 + 234 = 2282 がこのときのポート番号という事でした。
FTPのポート番号は、他の資料では 20 となっていたので、プログラムでは、
試しに以下のようにしました。

PORT xxx,xxx,xxx,xxx,0,20

しかし、1回目だけしか結果が取れず、それ以降しばらく応答がありません。
(数分後には結果が取れました)

PORT xxx,xxx,xxx,xxx,8,240

のように適当な数字を毎回変えて指定すると繰り返し行えますが、
実際はどうすればよいのかわかりません。

そこで2つ教えて頂きたいと思います。
1.ポート番号は、1度使うとしばらく使えないのでしょうか?
2.コマンドプロンプトで動かすのと同じように、実行時点の空きポート番号を
 取得することはできないでしょうか?

どうぞよろしくお願い致します。
okay
会議室デビュー日: 2002/10/17
投稿数: 9
投稿日時: 2002-10-31 09:08
(;´Д`)ノ
http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/netpro01.html
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2002-10-31 10:50
ぷーちんです。

okayさん、お返事ありがとうございます。
早速、FTPの詳説を読みました。
最近買った本より詳しい内容で勉強になりました。

クライアント側の空きポート番号取得方法もご存知でしたら教えてください。

現在、TcpClient でサーバにPORTで適当な番号(コマンドプロンプトで
直前にdirを実行した際に表示されたポート番号+1した番号)を指定して、
TcpListenerでそのポート番号でデータを待つという作りにしています。
データが終われば、TcpListenerのStopメソッドでリスナを閉じているので、
次のデータ送受信でも、再度同じポート番号が使えるのかと考えていたのですが、
やはり毎回ポート番号を変えてやらなければ駄目なんでしょうか...。
変える為には、ポート番号の取得する必要があるので困っています。

よろしくお願い致します。

okay
会議室デビュー日: 2002/10/17
投稿数: 9
投稿日時: 2002-10-31 13:26
(;´Д`)ノ
TcpListenerのコンストラクタのドキュメントを読んでみてくらさい。
例えば・・・
TcpListener listener = new TcpListener(0);
listener.Start();
Console.WriteLine(listener.LocalEndpoint);
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2002-10-31 14:32
ぷーちんです。

TcpListenerのコンストラクタのドキュメント読んでみました。
すみません、しっかり「番号が 0 の場合、システムはオープン ポートを割り当てます。」
と、書いてありました。

教えていただいたとおり、以下の方法でポート番号が取得できました。

Dim tcpListener As TcpListener
tcpListener = New TcpListener(0)
tcpListener.Start()
Dim ipeLocalPort As IPEndPoint = CType(tcpListener.LocalEndpoint, IPEndPoint)

okayさん、どうもありがとうございました。
1

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