1

I would like to do as follows. What would be the best way? A general answer will also be fine.

I would like to intercept an HTTP request at the client end to alter some html content. For example, I go to CNN.com and rather than an article that's displaying "Two LA Dogs marry", it should say "Ridiculous title blocked".

It should be smooth that even a secure certificate won't be disturbed.

I am using C#.

Thanks!

UPDATE: Thank you all for your answers!

4

11 に答える 11

11

これはPrivoxyのフィルター ファイルを介して行うことができます。彼らの楽しいフィルターは、まさにあなたがやりたい置換の良い例です.

cnn.com で "Two LA Dogs Marry" を "ばかげたタイトル ブロックされた" に置き換えるには、アクション ファイルは次のようになります。

{ +filter{ridiculous-title-censor} }  
.cnn.com

フィルターファイルは次のようになります

# FILTER: ridiculous-title-censor Remove ridiculous titles
# This keeps CNN from getting too ridiculous
#
s/Two LA Dogs Marry/Ridiculous Title Blocked/ig
于 2012-05-16T19:49:40.630 に答える
4

Firefox を使用している場合の別のオプションは、Greasemonkeyスクリプトを使用することです。以下は、cnn.com のメイン ヘッドラインを変更するスクリプトの例です。

Greasemoney スクリプトの作成に必要な Javascript コーディングに慣れていない場合は、Platypus アドオンを使用してその場でページを編集し、スクリプト ファイルを自動的に生成できます。

于 2012-05-20T15:34:08.460 に答える
4

ローカル HTTP プロキシが可能で、最も一般的なアプローチです。

つまり、 Fiddlerを使用して、それが機能するかどうかを確認できます。トラフィックの定期的な監視に加えて、リクエスト/レスポンスの変更をサポートしています。

于 2012-05-14T16:05:14.827 に答える
2

HTTPListener を使用してプロキシを設定できます。しかし、それを正しく行いたい場合は、より低レベルのプログラムが必要になると思います。

  • 2 つの TCP ポート (80 & 443) を開き、着信接続を積極的にリッスンします。
  • 受け取ったら
    • 依頼者に代わって出向いて依頼する
  • HTTP レスポンスの取得
  • HTTP 応答を調べて変更します (該当する場合)
    • おそらくヘッダーを変更します(適切な場合)
  • リクエスタへの応答を転送する

すべてのリクエストを転送し、すべてのレスポンスを返す単純なプロキシから始めます。それが整ったら、応答の検査を開始できます。

それは始めるのに良い場所です。

于 2012-05-22T06:40:42.767 に答える
2

このようなアプローチは、達成したいことを行う上で最も効率の悪い方法です。

これがクライアント側のアプリケーションである場合、クライアントはそれを無効にして、役に立たなくする可能性があります。また、保守が難しく、SSL で確実に動作するようにするには、より複雑なプログラミングが必要です。

  • ブラウザ プラグインまたはツールバーを使用する場合は、特定のブラウザ用に作成する必要があります。
  • リッスン サーバーを使用して HTTP 要求をインターセプトすると、コンテンツが暗号化されるときに複雑さと問題が生じ、不要なオーバーヘッドも生じます。
  • ローカル プロキシを使用する場合 (つまり、クライアントのブラウザがローカル プロキシ サービスを指す必要があることを意味します)、おそらく最も効果的なクライアント側の方法ですが、それでも上記の欠点があります (保守が難しいなど)。

あなたがやろうとしていることは、車輪を完全に再発明することだと私は信じています.

報奨金を提供したという事実は、C# とクライアント側で実際にこれを行う必要があるという疑問を投げかけますが、「悪いことを検閲する」ということは、コンテンツを禁止する必要があることを意味し、クライアント側の方法は最終的にクライアントに力を与えることになります。この制限を削除します。

個人的には、Squidとそのコンテンツ適応機能で大きな成功を収めました。

これは、クライアントが制御されたインターネット ソースを持っている必要があることを意味します。つまり、それらがすべて LAN 内にあり、共通のインターネット ゲートウェイを共有している場合、プロキシとして機能するサーバーがあれば、これは簡単に実現できます。

シンプルなUbuntu Server Editionを搭載できる小さなLinuxボックスを入手して、Squidを追加することをお勧めします。ネットにはチュートリアルがあふれていますが、チュートリアルがなくてもできるレベルの実装になっています。

話が逸れたかもしれませんが、参考になれば幸いです。

于 2012-05-23T08:15:29.477 に答える
1

ここから撮影。

これは、Windows のレイヤード サービス プロバイダーを介して実行できます。

ウィキペディアから:

"A Layered Service Provider (LSP) is a feature of the Microsoft Windows Winsock 2 Service Provider Interface (SPI). A Layered Service Provider is a DLL that uses Winsock APIs to insert itself into the TCP/IP stack. Once in the stack, a Layered Service Provider can intercept and modify inbound and outbound Internet traffic. It allows processing all the TCP/IP traffic taking place between the Internet and the applications that are accessing the Internet (such as a web browser, the email client, etc). "

たとえば、AdMuncher は、広告を回避するために http コードを傍受して挿入しています。もう 1 つの提案は、オープンソースの広告ブロック プログラムを見つけて、それがどのように実装されているかを確認することです。

于 2012-05-23T13:48:41.107 に答える
0

自分のサイトのためにこれを傍受したいということですか?

いずれにせよ、C# はクライアント側の言語ではないため、javascript または jQuery で実行する必要があります。

于 2012-05-14T15:58:44.957 に答える
0

または、ツールバーや単純なクロム アドオンをコーディングすることもできます。これは非常に簡単ですが、C# ではありません。

次のように、プロキシ経由でブラウジングを監視するライブラリを検索できます。

http://httpproxynet.codeplex.com/

このプロジェクトで Java が使用するのと同じ概念: http://www.charlesproxy.com/

興味深いね、頑張ってね :)

于 2012-05-22T10:11:32.367 に答える
0

非同期プラグ可能プロトコルは、このタイプのものに使用できます。ただし、ここで説明されているように、INFO: Implementing HTTP-like Asynchronous Pluggable Protocols : 「さまざまな理由から、Microsoft はデフォルトの HTTP プロトコルを置き換えたりラップしたりすることをサポートも推奨もしていません。」

于 2012-05-23T14:47:36.313 に答える
0

ずっと前に、Plugable Mime Filtersを使用して IE にこの機能を実装しました。そのため、このスタック オーバーフローの c# で検索した後、この投稿を作成しました。

これがお役に立てば幸いです。

于 2012-05-23T02:12:46.737 に答える