2009-05-29 10 views
7

私の希望に近いその質問(How to create a simple proxy in C#?)を読んでいました。シンプルなC#httpモニタ/ブロッカーを作成するには?

Firefox、IEなどを監視し、ナビゲートされたすべてのページを記録するC#アプリを開発したいだけです。訪問したページに応じて、(親のフィルタのような)サイトをブロックしたい。

コードスニペット/サンプルはいいですが、使用するクラスの方向性を教えていただけたら、私は感謝します。 :-)

答えて

17

私は親のために適切なお答えします:子供たちが約10未満歳のとき、「ペアレンタルコントロール」

たalaプロキシサーバーから始めることができます。その後、プロキシを回避する方法(またはプロキシをバイパスする独自のクライアントアプリケーションを実行する方法)がわかります。 10代前半では、生のソケットを使用することができます。 このプログラムをVisual Studio(C#)に入力します。

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      byte[] input = BitConverter.GetBytes(1); 
      byte[] buffer = new byte[4096]; 
      Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 
      s.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.91"), 0)); 
      s.IOControl(IOControlCode.ReceiveAll, input, null); 

      int bytes = 0; 
      do 
      { 
       bytes = s.Receive(buffer); 
       if (bytes > 0) 
       { 
        Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytes)); 
       } 
      } while (bytes > 0); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
    } 
} 

これは単なる「スニペット」であり、適切なデザインとエラーチェックがないことに注意してください。 [現状のまま使用しないでください。]あなたのマシンにIPアドレスを変更してください。プログラムAS administratorを実行します(コマンドラインで「runas」を使用するか、「管理者として実行」を右クリックしてください)。管理者だけが現代版のWindowsでrawソケットを作成して使用することができます。座ってショーを見る。

すべてのネットワークトラフィックはコードに配信されます(画面に表示されますが、このプログラムではうまくいきません)。

次の手順では、いくつかのプロトコルフィルタを作成します。さまざまなインターネットアプリケーションプロトコル(あなたがまだ分かっていないと仮定して)について学び、プログラムを修正してパケットを調べます。 HTTPプロトコルを探して、適切なデータ(GET要求など)を保存します。

は、私が個人的にAIM(AOLインスタントメッセンジャー)、HTTP、MSNメッセンジャー(Windows Liveメッセンジャー)、POP、およびSMTPのセットアップフィルターを持っています。今日のところ、HTTPは、子供たちが最近AIMに向かってFacebookの壁を好んでいるので、ほとんどすべてが取得されています。

子供たちが10代前半から早い時期に達するにつれて、監視をバックオフしたいと思うでしょう。これは、子供たちが "育つ"ことを可能にすることだと言われていますが、本当の理由は "あなたは知りたくありません。"です。私はget要求のURLとクリアテキスト(pop、basic authなど)で書かれたユーザ名/パスワード(緊急状況の場合)を収集するだけです。

私は十代後半に何が起こるか分かりません。物事をもっと悪化させるイメージはありませんが、「私はまだ何も見ていません」と言われています。

これは以前に言われたように、これはターゲットマシンで実行されたときにのみ機能します(私は家のすべてのマシンでコピーを実行します)。それ以外の場合は、単純な監視のために、あなたのルータを確認してください - 私のいくつかの素晴らしいログ機能があります。

最終的なコメントは、このアプリケーションをWin32 APIに対してC/C++で直接記述し、マシンに管理者権限で実行されているサービスとしてインストールすることです。私はこのタイプのコードが管理されたC#に適しているとは思わない。監視と制御のためにC#でUIを添付することができます。システムにはほとんど影響を与えないようにコードを設計する必要があります。

+0

'Console.WriteLine(ex);'を使うべきではありません。意味がありません。 'ex.Message'(またはそのようなもの)か、try-catchブロックをまったく使用しません。例外のメッセージは出力に自動的に書き込まれます。 – abatishchev

+1

Proxifier PortableとPuttyを使ってセキュアなsshトンネルを作成し、外部プロキシに送っても問題ありません:Pこの答えは非常に興味深いですが、これは私の新しいプロジェクトにとって素晴らしいスタートです。 –

+0

この記事をありがとうございました。 いくつかのプロトコルフィルタの作成について、より多くの方向性を得ることができます。私は何を検索すべきですか?私はGoogleの "HTTPプロトコルフィルタC#"をしようとしていますが、私は非常にこのコードがコンソールに書き込んでいるすべてのランダムな文字について何をすべきかはわかりません。 – Harry

7

あなたのアプローチは、閲覧するのに使用しているボックスと別のプロキシサーバーでこのアプリケーションをインストールするかどうかによって異なります。

これを別のサーバーで実行している場合、クライアントPCのポイントとなるC#プロキシサーバーを作成するだけで、C#/マネージコードでこれを実現する方が簡単になります。 System.Net.Sockets名前空間TcpListenerとTcpClientはあなたの友人になります。

ただし、同じマシンにインストールする場合は、WinPcapSharpPCap、おそらくFiddlerと考えてください。

希望に役立ちます。