501 - Server cannot accept argument のとある解

IIS に同じマシンの FTP クライアントから繋ぐと何故か 501 - Server cannot accept argument が出る、というトラブルを調べてみた。
 
結果、その環境で使わざるを得ない、独自実装の FTP クライアントが犯人だった。
 
寡聞にして IIS 7.5 だけなのか FTP の仕様なのかは知らないのだが、少なくとも IIS は制御コネクションと違う IP 宛ての PORT コマンドを弾くらしい。
 
そしてこの IIS 7.5 において、この制御コネクションのクライアント IP は、サーバにループバックアドレスで接続されればループバックアドレス、そうでなければそのアドレスになるらしい。つまり 127.0.0.1 へ繋げばクライアントも 127.0.0.1 、 192.168... で繋げば 192.168... だと認識するわけだ。
 
問題の独自クライアントは自アドレスとして、先の例でいうなら必ず 192.168... を用いているのだ。 127.0.0.1 で見に行った場合に対応していない。
 
もちろん Windows 標準の FTP コマンドならば、 501 など発生しない。 127.0.0.1 へ繋いだ際には PORT コマンドも 127.0.0.1 で送っていた。
 
……このクライアント、アクティブ/パッシブも選べないうえドキュメントもないが広く公開されているモノでもない。だからこのエントリはどうしようもなく使えない覚え書きでしかないが、このようなゴミ箱へレイアップシュートするような代物しか許されない環境への恨みと、こんなネタでも理解できれば楽しく思えた自分の単純さを残しておく。
 
以上、2015年1月付けのテキストでした。見つけちゃったから公開しておく。 IIS は制御コネクションと違う IP 宛ての PORT コマンドを弾くって話の元ページは何故か記載していなかったので見付からなかったよ……。