Newsgroup: it.comp.dotnet
Titolo: Intercettare richieste dns

Dovrei poter intercettare richieste dns inviate dai browser ed 
elaborarle (diciamo all'inizio trascriverle), usando C#, sul pc locale 
(lo stesso dove gira il browser per intenderci).
Da cosa posso iniziare, un servizio? Mi sapete dare qualche link ?
Grazie Sandro

 Grazie Sandro
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

> Grazie Sandro
Il workaround c'è: implementare un proxy http locale e farlo utilizzare 
al browser.
Sarà lui a fare le richieste DNS e a gestirle secondo i criteri 
desiderati dall'OP.
L'avevo fatto anni fa in VB6...


Se parli delle sole richieste DNS, il browser non fa nulla. È il 
sistema operativo ad avviare la risoluzione del nome in modo 
trasparente all'applicazione.
Il proxy ha evidentemente un altro scopo.
Hai diversi modi:
- se ti serve redirigere specifici host, basta modificare il file hosts 
nella system32\drivers\etc
- se devi intercettare le richieste devi cambiare dns al sistema 
operativo e impostarne uno tuo a cui farai fare il ruolo di 
"forwarder". Ti dovrebbe bastare installare un servizio dns già pronto
- se vuoi scriverti un forwarder devi armarti di pazienza, ascoltare la 
porta 53 sia tcp che udp, interpretare i pacchetti come da RFC e poi 
svolgere il ruolo di forwarder rispedendo ad un altro dns le richieste 
(vedi RFC).
Io ho scritto un dns client in c# tanto tempo fa (fx 1.0) ed è 
particolarmente rognoso perché ci sono pacchetti variabili in 
lunghezza, cosa che in C# non si fa in modo agevole. Ad ogni modo non 
c'era una reale difficoltà ma solo rognoso per gestire tutte le 
casistiche.
Inoltre tieni conto che le RFC successive a quella principale sono 
parecchie e quindi bisogna vedere dove ti vuoi fermare a implementarle.
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

 Il proxy ha evidentemente un altro scopo.
Avrà pure "evidentemente" un altro scopo, ma quando dovetti fare 
quell'accrocchio anni fa per registrare le richieste fatte dal browser e 
alterarne condizionalmente alcune (che è esattamente quello che ha chiesto 
l'OP) impiegai tre ore scarse con VB6 a implementare un semplice proxy 
locale che come effetto collaterale facesse quanto detto sopra. 


Se vuole scriversi un proxy, a me va benissimo. Ma lui ha chiesto un 
dns che fa cose differenti.
Con questo non voglio nulla togliere a quello che hai fatto, sono solo 
due cose molto diverse tra loro.


 dns che fa cose differenti.
Eh no... lui non ha chiesto un DNS, lui ha chiesto come fare per 
"[...] poter intercettare richieste dns inviate dai browser ed 
elaborarle (diciamo all'inizio trascriverle) [...]"
Scrivere un DNS locale (che non interferisca col sistema) č, come hai 
fatto notare tu, abbastanza complesso, a differenza dello scrivere un 
proxy locale che trascrive le richieste prima di evaderle, che invece č 
relativamente piů semplice visto che ricordo che di fatto si trattava di 
processare due o tre header http e il resto era tutto traffico passante. 
Sono due strade diverse che rispondono entrambe alla richiesta originale 
(trascrivere le richieste fatte ed eventualmente elaborarle)
L'OP scelga quella che preferisce :-)

 L'OP scelga quella che preferisce :-)
Ovviamente.


 L'OP scelga quella che preferisce :-)
Non sono d'accordo, ne con te ne' con Raffaele: sono due strade
diverse e quale conviene prendere dipende dal dettaglio dei requisiti,
che per il momento semplicemente non sono abbastanza chiari. All'OP
semmai di chiarire la domanda. -- Cio' detto, sarei anche io piu'
incline a pensare che qui si tratta di proxy, ma i requisiti vanno
elicitati non indovinati.
-LV

 intercettare e modificare al volo le richieste.
Ok, ma se avesse voluto qualcosa di pronto non avrebbe posto la domanda 
in un newsgroup su dotnet, no? :-) 

 [...] ma i requisiti vanno elicitati non indovinati.
Siamo esseri umani, non androidi. Ipotizziamo, speculiamo e - perchè no - 
tiriamo a indovinare... a volte ci si azzecca. :-) 

 in un newsgroup su dotnet, no? :-) 
Magari pensava di cavarsela con due righe di codice, cosa non proprio 
vera.


 personalissimo avviso al problema per come l'ho capito.
Ma anche io ho dato la mia personalissima opinione. Nessuna ostilità 
(neanche tra virgolette) figurati... si chiaccherava... 

 tiriamo a indovinare... a volte ci si azzecca. :-)
Siamo programmatori, che poi siamo umani e' un punto di vista
discutibile. ;)
Ipotesi e speculazioni ci stanno bene in sede di raccolta requisiti:
si discute, si negozia, si immagina e si progetta. Ma e' il cliente
che ha la parola finale. Per un tecnico indovinare i requisiti e' un
no no: a parte che piu' spesso che altro si sbaglia, con pessime
conseguenze, le soluzioni basate su requisiti incompleti o ambigui
sono sempre over-ingegnerizzate perche' devono necessariamente essere
piu' generali dello stretto necessario, dovendo tenere conto di
casistiche che potrebbero esserci come non esserci, con conseguenze di
nuovo pessime. E qui gia' sento le fanfare del "il problema non e' mai
completamente chiaro" ecc. ecc.  Nonsense, si tratta piuttosto di
raggiungere certi livelli di qualita'.
-LV

 raggiungere certi livelli di qualita'.
amen :-)



Vi ringrazio per le vostre idee, ipotesi e quant'altro. Come al solito 
ho imparato cose nuove grazie al forum.
Quello che avevo in mente era una applicazione che si installava, magari 
come servizio windows, e annotava gli url puntati dal browser (magari il 
passo successivo è autorizzarli o no). Il proxy locale è molto carino 
come idea, ma va configurato il browser per utilizzarlo, e non vorrei 
toccare tali config ( anche perche facilmente si puo disabilitare). Per 
lo stesso motivo non vorrei modificare gli indirizzi DNS.
Grazie
Sandro

 Sandro
Se lo vuoi fare per più utenti sulla rete è meglio installare un 
content-filtering centralizzato.
Esistono tante appliance che fanno content-filtering basate su linux.
Svilupparlo bene è meno banale di quello che si pensi. Inoltre quelli 
"seri" sono basati su un abbonamento che aggiorna costantemente i siti 
su internet classificandoli in base al contenuto e permettendo i 
sysadmin di filtrare il contenuto sulla base della categoria. Senza 
questo pre-filtraggio non riuscirai a filtare più di tanto anche perché 
molti siti fanno morphing o erogano contenuti di altri siti.
Infine devi fare i conti con tools come Tor che sono usati da chi vuole 
navigare in modo anonimo.


 motivo non vorrei modificare gli indirizzi DNS.
Di metodi ce ne sono parecchi, ma tutti implicano il mettersi da qualche 
parte nello stack di rete. Il proxy e' probabilmente la forma piu' diffusa, 
soprattuto nei contesti intranet, anche perche' in tali contesti la 
configurazione del browser e' comunque bloccata per gli utenti standard. In 
ogni caso, quale strada sarebbe preferibile nel tuo caso specifico dipende 
dai dettagli del tuo scenario applicativo: per esempio, e' request logging o 
content filtering o altro che in effetti vuoi fare? E in quale scenario di 
rete (tipologia di utenza) ti devi collocare?
-LV
 
--- Posted via news://
freenews.netfront.net/
 - Complaints to 
ne...@netfront.net
 ---


grazie anche per il tuo intervento Ludovico, la mia necessità è relativa 
ad un solo PC standalone, non devo considerare reti locali o Intranet. 
Immagina che, SENZA toccare le configurazioni del browser del PC, devi 
loggare gli url che apre (in una seconda fase dovra autorizzarli o no, 
ma ora basta questo). Se questo è possibile, ripeto se, dove posso 
posizionarmi?
Grazie

 dove posso posizionarmi?
Che non puoi toccare la configurazione del browser e' un requisito un po' 
strano perche' qualcosa sul PC dell'utente andra' comunque 
installato/configurato.  In ogni caso, se cosi' deve essere, penso che ti 
occorra implementare un network gateway: la configurazione da toccare e' 
quella di rete, in piu' il gateway fa da tramite per tutto il traffico, non 
solo le richieste http e non solo le richieste provenienti da un browser.
Non ti so dire molto in proposito perche' non ci ho mai provato e c'e' ben 
poco materiale guida in giro per il Web. Pero' ti ho trovato quella che 
penso sia la RFC di riferimento, sugli Internet gateways: 
http://www.faqs.org/rfcs/rfc1009.html
