147

私は数週間前に Privoxy をダウンロードしましたが、単純なバージョンをどのように実行できるか知りたいと思っていました。

リクエストをプロキシに送信するようにブラウザ(クライアント)を構成する必要があることを理解しています。プロキシはリクエストを Web に送信します (http プロキシとしましょう)。プロキシは応答を受け取ります...しかし、プロキシはどのようにして要求をブラウザ (クライアント) に送り返すことができますか?

Web で C# と http プロキシを検索しましたが、バックグラウンドで正しく動作する方法を理解できるものは見つかりませんでした。(リバース プロキシは必要ないと思いますが、よくわかりません)。

この小さなプロジェクトを続けるための説明や情報を持っている人はいますか?

アップデート

これは私が理解していることです(下の図を参照)。

ステップ 1プロキシがリッスンするポートで、すべての要求が 127.0.0.1 に送信されるようにクライアント (ブラウザ) を構成します。この方法では、リクエストはインターネットに直接送信されず、プロキシによって処理されます。

ステップ 2プロキシは新しい接続を確認し、HTTP ヘッダーを読み取り、実行する必要がある要求を確認します。彼は要求を実行します。

Step3プロキシはリクエストから回答を受け取ります。今、彼は Web からクライアントに回答を送信する必要がありますが、どのように???

代替テキスト

便利なリンク

Mentalis Proxy : プロキシであるこのプロジェクトを見つけました (しかし、もっと欲しいものがあります)。ソースを確認するかもしれませんが、コンセプトをより理解するための基本的なものが本当に欲しかったのです。

ASP Proxy : こちらでも情報が得られるかもしれません。

Request Reflector : これは簡単な例です。

シンプルな Http Proxy を使用した Git Hub リポジトリを次に示します。

4

10 に答える 10

94

私は HttpListener などを使用しません。そのようにすると、非常に多くの問題に遭遇します。

最も重要なことは、サポートするのが非常に面倒になることです。

  • プロキシ キープアライブ
  • SSL は機能しません (正しい方法では、ポップアップが表示されます)
  • .NET ライブラリは、一部の要求が失敗する原因となる RFC に厳密に従っています (たとえ IE、FF、および世界中の他のブラウザーが動作しても)。

あなたがする必要があるのは:

  • TCP ポートをリッスンする
  • ブラウザのリクエストを解析する
  • Extract Host は、TCP レベルでそのホストに接続します
  • カスタム ヘッダーなどを追加する場合を除き、すべてを前後に転送します。

異なる要件を持つ .NET で 2 つの異なる HTTP プロキシを作成しましたが、これが最善の方法であると言えます。

メンタリスはこれを行っていますが、彼らのコードは「デリゲートスパゲッティ」であり、GoToよりも悪いです:)

于 2009-04-30T11:05:34.560 に答える
36

HttpListener着信リクエストをリッスンするHttpWebRequestクラスと、リクエストをリレーするクラスを使用してビルドできます。

于 2008-10-22T17:34:06.587 に答える
35

私は最近、 TcpListenerTcpClientを使用して c# .net で軽量プロキシを作成しました。

https://github.com/titanium007/Titanium-Web-Proxy

セキュア HTTP を正しい方法でサポートします。クライアント マシンは、プロキシによって使用されるルート証明書を信頼する必要があります。WebSockets リレーもサポートします。パイプライン処理を除く、HTTP 1.1 のすべての機能がサポートされています。とにかく、パイプラインはほとんどの最新のブラウザーでは使用されていません。Windows 認証 (プレーン、ダイジェスト) もサポートしています。

プロジェクトを参照してアプリケーションを接続し、すべてのトラフィックを確認して変更できます。(リクエストとレスポンス)。

パフォーマンスに関しては、自分のマシンでテストしましたが、目立った遅延はありません。

于 2015-01-06T02:10:40.367 に答える
14

トラフィックをインターセプトするだけの場合は、フィドラー コアを使用してプロキシを作成できます...

http://fiddler.wikidot.com/fiddlercore

最初に UI で fiddler を実行して、その動作を確認します。これは、http/https トラフィックをデバッグできるプロキシです。これは c# で書かれており、独自のアプリケーションに組み込むことができるコアを備えています。

FiddlerCore は商用アプリケーションでは無料ではないことに注意してください。

于 2012-06-20T15:44:26.550 に答える
6

HTTPListenerを使用する場合は、多くの問題が発生し、リクエストを解析する必要があり、ヘッダーに関与することになります...

  1. tcpリスナーを使用してブラウザのリクエストをリッスンします
  2. リクエストの最初の行のみを解析し、接続するホストドメインとポートを取得します
  3. ブラウザリクエストの最初の行で、見つかったホストに正確なrawリクエストを送信します
  4. ターゲットサイトからデータを受信します(このセクションで問題があります)
  5. ホストから受信した正確なデータをブラウザに送信します

ブラウザのリクエストに何が含まれているかを知る必要がなく、それを解析する必要がないことがわかります。最初の行からターゲットサイトのアドレスを取得するだけです。通常、最初の行は次のようになります。GET http: //google.comHTTP1.1またはCONNECTfacebook.com: 443(これはsslリクエスト用です)

于 2010-09-08T17:32:24.967 に答える
6

OWIN と WebAPI を使用すると、作業が非常に簡単になります。C# プロキシ サーバーの検索で、この投稿http://blog.kloud.com.au/2013/11/24/do-it-yourself-web-api-proxy/も見つけました。これが私の進む道になります。

于 2015-01-19T12:34:00.107 に答える
5

Socks4 は、実装が非常に単純なプロトコルです。最初の接続をリッスンし、クライアントから要求されたホスト/ポートに接続し、クライアントに成功コードを送信してから、ソケットを介して発信ストリームと着信ストリームを転送します。

HTTP を使用する場合は、いくつかの HTTP ヘッダーを読み取り、場合によっては設定/削除する必要があるため、もう少し手間がかかります。

私の記憶が正しければ、SSL は HTTP および Socks プロキシ間で機能します。HTTP プロキシの場合、CONNECT 動詞を実装します。これは、上記の socks4 とほぼ同じように機能します。クライアントは、プロキシされた tcp ストリームを介して SSL 接続を開きます。

于 2012-06-15T15:20:38.453 に答える
2

ブラウザはプロキシに接続されているため、プロキシが Web サーバーから取得するデータは、ブラウザがプロキシに対して開始したのと同じ接続を介して送信されます。

于 2008-11-03T16:15:52.110 に答える