Newsgroup: it.comp.os.linux.sys
Titolo: Statistiche query dns

Conoscete qualche sistema per generare delle statistiche (tassativamente per zona) dns ?
 
Io per ora uso wireshark con un comando di questo tipo
 
tshark port domain -T fields -e frame.time -e 
dns.qry.name
 -R "dns.flags.response eq 0"
 
e loggo su file.
 
Esiste una soluzione più performante (e che magari mi permetta di loggare anche il tipo di richiesta) ?


1) quale Nameserver ?
 
2) Se usi PDNS (come mi pare di ricordare) hai provato a guardare la 
comoda interfaccia web ?
 

 anche il tipo di richiesta) ?
 
Non ï¿œ molto chiaro quello che devi fare. Rimanendo sulla soluzione basata 
sulla cattura, potresti migliorare le prestazioni provando a:
 
- selezionare il traffico con un capture filter invece che con un display 
  filter;
- disaccoppiare la cattura dalla decodifica: cattura su file (pcap) e poi
  decodifica in batch con tshark.
 
Il tipo ï¿œ in dns.qry.type (-e).
 
Ciao
Fabio

 comoda interfaccia web ?
 
No, perchè:
1) mi serve scriptabile
2) AFAIK pdns traccia solo le richieste complessive sull'intero server e non per zona.
 

   decodifica in batch con tshark.
 
Ok.

 Ok.
 
Ovviamente, non usare tshark per la cattura, in questo caso: tcpdump o daemologger o
fattoappostad vanno meglio e offrono piï¿œ opzioni (<hint>tipo ruotare i pcap</hint>).
 
Ciao
 
 
Fabio

 fattoappostad vanno meglio e offrono più opzioni (<hint>tipo ruotare i pcap</hint>).
 
Ottimo, provo con tcpdump.

 Conoscete qualche sistema per generare delle statistiche (tassativamente per zona) dns ?
 
io sul client loggo con dnsmasq
 
log-facility=/var/log/_dnsmasq.log
 
e poi uno script per estrarre le statistiche
 
 
#!/bin/sh
 
# Tue Nov 27 10:55:41 CET 2012
# allinea a destra un testo
 
COLON=70
 
rightj(){
	while read LINE ; do
		printf "%${COLON}s\n" "$LINE"
	done
};
 
LOGFILE=/var/log/_dnsmasq.log
echo "reading $LOGFILE ... stats in dnsmasq-stat.log"
cat $LOGFILE | pv -t -r -b | cut -d\  -f 6 | rev | sort | cut -d\. -f 
1,2 | rev | uniq -c | rightj > dnsmasq-stat.2.log
 
#OUTPUT=$(cat /var/log/_dnsmasq.log | cut -d\  -f 6 | rev | sort | rev | 
uniq -c)
#echo "$OUTPUT" | right
 
 
ciao
 
-- 
PaoloP�
 

 e poi uno script per estrarre le statistiche
 
Client? io devo loggare sul server.
Per usare dnsmasq dovrei metterlo in ascolto sulla 53 e fargli fare il forward di tutto a powerdns su altra porta.
 
Tra questo ed usare uno sniffer, preferisco lo sniffer almeno se dovesse morire non causerei disservizi. Se dovesse morire dnsmasq, il dns smetterebbe di funzionare.

 Ovviamente, non usare tshark per la cattura, in questo caso: tcpdump o daemologger o fattoappostad vanno meglio e offrono più opzioni (<hint>tipo ruotare i pcap</hint>).
 
Ottimo suggerimento, tralasciando la rotazione automatica che devo ancora testare (ma che tcpdump support):
 
tcpdump -i eth0 -w logfile "port domain and udp[2:1]&0x80=0x80"
 
mi logga il timestamp, il tipo di richiesta e la zona (più altre cose di cui farei a meno ma non ho capito come rimuovere)
 
poi con 
 
tcpdump -nttr logfile
 
mi parso il dump ed eventualmente lo elaboro con calma.
 
Farei volentieri a meno di loggare src/dst/protocollo e dimensione ma non ho capito come si fa.
 
In soldoni a me serve questo:
 
TIMESTAMP CNAME 
pippo.it
 
 
tutto il resto lo posso buttare via.

 TIMESTAMP CNAME 
pippo.it
 
 
Se ti serve solamente questo, tcpdump dovrebbe essere piï¿œ veloce 
di tshark, ma ti dovrai parsare lo stdout.
 
Ciao
 
 
Fabio

 di tshark, ma ti dovrai parsare lo stdout.
 
Si, mi serve solo il timestamp , il tipo di query ed il record richiesto.
Per ora loggo su file tramite tcpdump, converto il dump in csv tramite tshark e poi lo parso da PHP.
 
Il passaggio mediante tshark serve perchè lui tratta correttamente i campi, in caso contrario dovrei andare di grep, ma non sempre l'output di tcpdump e costante (a volte mancano alcuni valori). tshark mi permette di gestire il tutto con una riga di codice.