C#でFTPクライアントプログラムを書いてます。.NETFrameworkのクラスライブラリは、ネット周りの機能がわりと充実しているんですが、なぜかFTPクラスはないんですよね。で、しかたなくソケット(Socketクラス)を使って書いているわけです。ホスト名からDNSクラスで得たIPAddressとポートからIPEndPointを作ってサーバーに接続し、あとはコマンドを送信していくのですが、困ったのが「PORT」コマンドで送る「自分自身のIPアドレス」の取得。
DNSクラスのGetHostName()メソッドでローカルマシンのホスト名を取得できる……はずなのですが、試してみると「マシン名」が帰ってくるのです。当然、これから「ローカルマシンのネットワークカードのIP」を取得することはできません。他にローカルマシンのIP取得する手はないかと調べてみたのですが、見つけられず……。まあ、Win32API使う、という手はありますがw
しかたなく今回はパッシブモード(PASV)専用にしましたが、他のプログラムでも使うでしょうし、何とか自分のIPは取れるようにしておきたいところ。