Monitoraggio del traffico HTTP tramite tcpdump


42

Per monitorare il traffico HTTP tra un server e un server Web, attualmente sto utilizzando tcpdump. Funziona bene, ma mi piacerebbe sbarazzarmi di alcuni dati superflui nell'output (lo so tcpflowe wireshark, ma non sono prontamente disponibili nel mio ambiente).

Dalla tcpdumppagina man:

Per stampare tutti i pacchetti HTTP IPv4 da e verso la porta 80, ovvero stampare solo pacchetti che contengono dati, non, ad esempio, pacchetti SYN e FIN e pacchetti solo ACK.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Questo comando

sudo tcpdump -A 'src example.com e la porta tcp 80 e (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '

fornisce il seguente output:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Flags [P.], seq 918827135: 918827862, ack 351213824, win 4316, opzioni [nop, nop, TS val 4093273405 ecr 869959372], lunghezza 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Server: Apache / 2.2.3 (Red Hat) Tipo di contenuto: text / html; charset = UTF-8 Data: sab, 14 nov 2009 18:35:22 GMT Età: 7149
Lunghezza contenuto: 438

<HTML> <HEAD> <TITLE> Esempio di pagina Web </TITLE> </HEAD> <body>
<p> Hai raggiunto questa pagina web ... </p> </BODY> </HTML>

Questo è quasi perfetto, tranne per la parte evidenziata. Cos'è, fine - ancora più importante - come posso liberarmene? Forse è solo una piccola modifica dell'espressione alla fine del comando?

Risposte:


39

tcpdump stampa i pacchetti completi. "Garbage" che vedi sono in realtà intestazioni di pacchetti TCP.

puoi certamente massaggiare l'output con uno script perl, ma perché non usare invece tshark, la versione testuale di WireShark?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

accetta gli stessi argomenti di tcpdump (stessa libreria) ma dal momento che è un analizzatore può eseguire un'ispezione approfondita dei pacchetti in modo da poter perfezionare ulteriormente i filtri, ad es.

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'


1
Grazie - dopo aver provato tutti i suggerimenti, tshark sembra lo strumento migliore per il lavoro. Attualmente sto usando "tshark -d tcp.port == 8070, http -R 'http.request o http.response'". Ora, se solo potessi convincere Tshark a "seguire il flusso TCPC" proprio come può fare WireShark (questo mi viene chiesto molto, ma non ho ancora trovato la risposta). "-V" mostra le informazioni sui pacchetti TCP e IP e così via, che non mi interessano. Ma credo di poterlo rimuovere usando uno script.
otto.poellath,

4
È inoltre possibile cercare "GET" in un filtro di acquisizione facendo corrispondere i valori ASCII per ogni personaggio: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Ho aggiunto una pagina al sito Web di Wireshark qualche tempo fa che ti aiuta a creare filtri di acquisizione per la corrispondenza delle stringhe: wirehark.org/tools/string-cf.html
Gerald Combs

18

dai un'occhiata a ngrep - può essere di qualche utilità per te.

come riferimento per gli altri httpry [il server sembra essere inattivo ora ma spero sia temporaneo] e tshark sono utili anche per l'analisi del protocollo passivo - il primo solo per http, il secondo - per molto altro.


2
+1 per ngrep. Strumento molto utile.
Tylerl,

ngrep e httpry sembrano decisamente utili, ma ngrep non è a conoscenza di HTTP e AFAIK, httpry funziona solo con le intestazioni HTTP e non può visualizzare i dati del payload.
otto.poellath,

@sapporo - sure - ngrep è indipendente dal protocollo, ma è possibile aggiungere il filtro pcap "porta 80" e ottenere .. nella maggior parte dei casi il traffico http.
pQd

Imo, ngrep è 100000x meglio di tcpdump
Daniel W.

5

Prova httpry o justniffer

Justniffer funziona bene sui pacchetti tcp riordinando le ritrasmissioni e la frammentazione dell'ip


1
Grazie! justniffer è quello che stavo cercando (penso che sia l'unico strumento menzionato che è molto semplice e misura la durata della richiesta).
gkop,

1

Suggerirei di usare una riga di comando tcpdump attenuata che memorizza tutto in un file pcap per il processo post. A seconda di cosa esattamente stai cercando di diagnosticare tcpflow funziona alla grande per riunire le comunicazioni in modo coerente per l'analisi.

Alcune altre buone informazioni tra cui alcuni usi di httpry sono disponibili all'indirizzo: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html


0

Il server web che stai utilizzando non produce registri? Sicuramente sarebbe un modo molto migliore per monitorare il traffico HTTP, ci sono molti strumenti per analizzare i dati e qualsiasi server web competente dovrebbe produrre log affidabili.


4
Chiaramente. Immagino che ci abbia già pensato, comunque. A volte è utile monitorare i dati effettivi inviati tra il punto A e il punto B.
tylerl,

0

Esistono diversi strumenti disponibili sul mercato progettati appositamente per il monitoraggio del traffico HTTP. Fiddler2 ( http://www.fiddler2.org ) e HTTP Debugger Pro sono esempi di tali strumenti.


4
Grazie per i vostri suggerimenti. Sfortunatamente, entrambi gli strumenti sembrano funzionare solo su Windows. Non l'avevo menzionato, ma sto cercando qualcosa che funzioni su Linux.
otto.poellath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.