C#でNAS(LinkStation)のFTPにアクセスしまくるソフトを作るのにTKFP.DLLを使ってみることにした。接続が切れたのを検知できないので、毎回ログインする方法を取ったのだけど、ログインするごとに10秒間待たされる。毎回一定時間待たされるので、多分何らかのタイムアウトが発生しているのだろうと考えた。
- IPアドレスで指定するとDNS逆引きが発生してタイムアウト。: バグ。ありえないことじゃない。[FIX] WebRequest クラスを使用して Web 要求を行う際の接続の問題
- LinkStationはProFTPdを使っていて、こいつのオプションUseReverseDNS off, IdentLookups offが設定されていないのかもしれない。: 不明。分かったところでどうしようもない。多分ログに名前を記録するためにデフォルトではONになっていると思われる。
- WindowsXPのファイアウォールのせい。: よくあること。なんかよく分からないネットワークがらみのことはこれを無効にすればたいてい解決。
Wiresharkでディスプレイフィルタ「tcp.port eq 21 or ftp」かけて見ていると、「220 server ready」が返って来るのが10秒かかっていた。「ftp 220 server ready slow」でぐぐってみると、てがかりとなる議論が。
ftp login very slow [Archive] - HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials
どうやらファイアウォールに引っかかっているためのようだ。ためしにファイアウォールを無効にすると待たされなくなった。しかし、無効にしとくわけにもいかないので、開くポートを限定したい。Wiresharkのフィルタを外してよく見てみると、ident 113ポートへのアクセスが3回記録されていた。どうやらこれのようだ。
「ftp 113」でぐぐってみると答えにたどり着いた。
参考:
DisplayFilters - The Wireshark Wiki
Hatena タグ: C#,FTP,220,server ready,Wireshark,ProFTPd,LinkStation,ファイアウォール,113,ident,UserReverseDNS,IdentLookups,逆引き