2

簡単に試してみる

c#.net3.5を使用してカスタムFTP実装を作成しました。システムは、接続の管理にTcpClient(アクティブモードの場合はTcpListener)を使用します。1つのインスタンスで奇妙な動作をしているので、考えられる原因を尋ねたいと思います。

クライアント自体は社内でうまく機能しており、クライアントのかなりの割合がそれに満足しています。しかし、私には理解できないものがあります。私はwiresharkの痕跡を送られてきましたが、本当の喜びはありません。クライアントマシンは、(クライアントの説明から)大きなネットワークインフラストラクチャであると私が信じているものの背後にあります。ネットワークの外部からは、同じサーバーへの接続が魅力のように機能します。これが私が見ているものです。

パッシブモードで動作している私のクライアントでは、データ接続のためにtcpハンドシェイク要求が送信されます(サーバーはパッシブモードに入り、ポートを指定します)が、確認応答されません。これにより、再試行と最終的なタイムアウトが発生します。

Filezilla(およびWindowsエクスプローラーとIE ...)クライアントでは、再びパッシブモードを使用して、接続は問題なく通過します。迷惑なことに、これはクライアントと私の上司がコードに指を向ける原因になっています。

Wiresharkのトレースを調べてみると、TCPフレーム間の違いはわかりません。すべての制御接続はポート21に到達し、両方のシナリオで確認されます。フラグも同様です。この場合、ポート52000+が大きい(ただし、私が持っているトレースでは同じではない)ことを除いて、データ接続にも同じことが当てはまります。

低レベルのプロトコルの問題に取り掛かるとき、私はネットワークプログラミングの専門家ではなく、より大きなネットワークの警告についての私の理解は非常に限られています。開発者として、私はすぐに「FIREWALL ISSUE」と叫びますが、それは誰にとっても実際には何も解決しません。

最後に、この種の動作を引き起こす可能性のあるハードウェア/ファイアウォールの種類を知っている人はいますか?アプリケーションレベルでトラフィックをブロックしているのではないかと疑っていますが、わかりません。

読んでくれてありがとう。

4

1 に答える 1

0

よく私の靴を輝かせます。信じられますか、これはおそらくユーザーエラーであることがわかります。

これにぶら下がっている大きな問題は、「なぜfilezillaとwindowsは機能するのに、ソフトウェアは機能しないのか」です。さて、私はついにサーバー側から何が起こっているのかを教えてくれるトレースを取得しました。

filezillaとwindowsはアクティブモードにフォールバックしているようですが、通知に失敗します。ポート20(パッシブモード、制御ホストポート)と21(アクティブモード、クライアントデータポート)がよく知られているため、ネットワークハードウェアはそれを許可する場合があります(ファイアウォールの設定に関係なく、多くの場合許可されます)。

ただし、機能としてFTPサークルでは推奨されていないため、当社のソフトウェアは自動的にアクティブモードにフォールバックしません。代わりに、アクティブモードは、接続を設定するときに選択する別のオプションです。不思議なことに、ファイアウォールによってザッピングされているのは発信クライアントのハンドシェイク要求ですが、奇妙なことが起こっています。私はこれを手洗いし、潜在的にクライアントに自動的にフォールバックします。

編集:ええ、ユーザーはネットワーク上にプロキシを持っていますが、それについては教えてくれませんでした。pebcakアラートを鳴らしてください!

于 2011-11-18T14:39:11.073 に答える