2009-05-29 8 views
7

Stavo leggendo quella domanda (How to create a simple proxy in C#?) che è vicina ai miei desideri.Come creare un semplice monitor/bloccatore http C#?

Desidero semplicemente sviluppare un'app C# che, ad esempio, controlli Firefox, IE, ecc. E registri tutte le pagine navigate. A seconda della pagina visitata, voglio bloccare il sito (come un filtro parentale).

I frammenti di codice/campioni sono buoni, ma se riesci a dirmi semplicemente quale direzione utilizzare per le lezioni, te ne sarò grato. :-)

risposta

17

Risponderò appropriato per un genitore: ala "Controllo genitori"

Si può iniziare con un server proxy quando i bambini sono meno di circa 10 anni. Dopodiché, scopriranno come aggirare il proxy (o eseguire le proprie applicazioni client che ignorano il proxy). Nei primi anni dell'adolescenza, puoi usare le prese crude. Digita questo programma in 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); 
     } 
    } 
} 

Si noti che questo è solo un “frammento”, privo di una progettazione adeguata e il controllo degli errori. [Si prega di non utilizzare 'così com'è' - si è richiesto solo un vantaggio iniziale] Modificare l'indirizzo IP sulla macchina. Eseguire il programma come amministratore (utilizzare "runas" sulla riga di comando o fare clic con il tasto destro del mouse su "Esegui come amministratore"). Solo gli amministratori possono creare e utilizzare socket grezzi nelle moderne versioni di Windows. Siediti e guarda lo spettacolo.

Tutto il traffico di rete viene consegnato al tuo codice (visualizzato sullo schermo, che non sembra bello, con questo programma).

Il passaggio successivo consiste nel creare alcuni filtri di protocollo. Scopri i vari protocolli delle applicazioni Internet (supponendo che tu non lo sappia già), modifica il programma per esaminare i pacchetti. Cerca il protocollo HTTP e salva i dati appropriati (come le richieste GET).

Personalmente ho i filtri di configurazione per AIM (AOL Instant Messenger), HTTP, MSN Messenger (Windows Live Messenger), POP e SMTP. Oggi, HTTP ottiene quasi tutto, dal momento che i bambini preferiscono il muro di Facebook a AIM al giorno d'oggi.

Mentre i bambini raggiungono l'adolescenza da inizio a metà anno, vorrai fare un salto indietro nel monitoraggio. Alcuni dicono che questo è per consentire ai bambini di "crescere", ma il vero motivo è che "non si vuole sapere". Ho fatto il back-up per raccogliere solo gli URL delle richieste get e il nome utente/password (per le situazioni di emergenza) che sono in chiaro (pop, basic auth, ecc.).

Non so cosa succede in tarda adolescenza; Non riesco a immaginare che le cose peggiorino di molto, ma mi è stato detto che "Non ho ancora visto nulla".

Come qualcuno ha detto in precedenza, questo funziona solo quando viene eseguito sul computer di destinazione (eseguo una copia su tutte le macchine della casa). Altrimenti, per un semplice monitoraggio, controlla il tuo router - il mio ha alcune caratteristiche di registrazione.

Il mio commento finale è che questa applicazione deve essere scritta direttamente in C/C++ rispetto all'API Win32 e installata come servizio in esecuzione con diritti amministrativi sulla macchina. Non penso che questo tipo di codice sia appropriato per il C# gestito. È possibile collegare un'interfaccia utente in C# per il monitoraggio e il controllo. È necessario progettare il codice in modo tale da non avere effetti evidenti sul sistema.

+0

Non si dovrebbe usare 'Console.WriteLine (ex);' - non ha senso. O ex.Message (o qualcosa del genere) o non utilizzare affatto il blocco try-catch. Il messaggio dell'eccezione verrà scritto automaticamente sull'output. – abatishchev

+1

Creare un ssh-tunnel sicuro con Proxifier Portable e Putty su un proxy esterno e tutto il lavoro è stato inutile: P Nondimeno +1 come ho trovato questa risposta molto interessante e questo sarà un buon inizio per un mio nuovo progetto. –

+0

Grazie mille per questo post. Per favore possiamo ottenere più indicazioni sulla creazione di alcuni filtri di protocollo. Cosa dovrei cercare? Sto cercando di google "filtro del protocollo http C#", ma non sono abbastanza sicuro di cosa fare su tutti i caratteri casuali che questo codice sta scrivendo alla console. – Harry

7

Il tuo approccio dipenderà dall'installazione di questa applicazione sulla stessa casella che stai utilizzando per navigare o su un server proxy separato.

Se si esegue questa operazione su un server separato, sarà più semplice eseguire tale operazione in C#/codice gestito, poiché si scriverà semplicemente un server proxy C# a cui i client del PC avranno accesso. Spazio dei nomi System.Net.Sockets TcpListener e TcpClient saranno tuoi amici.

Se, tuttavia, si sta installando questo sulla stessa macchina, dare un'occhiata a WinPcap e SharpPCap e forse a Fiddler per alcune idee.

Spero che questo aiuti.

Problemi correlati