Como faço para retornar apenas o cabeçalho Http do tshark?

12

Estou usando o tshark para cheirar meus pacotes e só estou preocupado com o cabeçalho http (de preferência na forma como é enviado, mas aceitarei o que posso obter).

Eu tentei usar:

tshark tcp port 80 or tcp port 443 -V -R "http"

O que me deu o cabeçalho, mas também o conteúdo (que eu não quero que seja uma grande quantidade de lixo para analisar). Eu realmente me importo apenas com o cabeçalho, existe alguma maneira fácil de obter exatamente isso (além de analisar os dados eu mesmo).

Editar: eu devo me qualificar Eu também me importo com host / porta para que eu possa acompanhar as solicitações em vários pacotes.

tzenes
fonte

Respostas:

18

Você pode usar os filtros de exibição de cabeçalho HTTP específicos para mostrar apenas os cabeçalhos de solicitação, apenas os cabeçalhos de resposta ou ambos.

Apenas para os cabeçalhos da solicitação:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Apenas para os cabeçalhos de resposta:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

E para os cabeçalhos de solicitação e resposta:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

Nota: Isso não filtra apenas os cabeçalhos, apenas os pacotes que os contêm; portanto, você provavelmente ainda obterá alguns dados, mas a quantidade de dados deve ser menor do que você faria de outra forma.

pesado
fonte
Ainda estamos falando de uma tonelada de dados como se eu tivesse uma solicitação para en.wikipedia.org. Estou recebendo 750k quando realmente quero apenas menos de 1k em cabeçalhos.
tzenes
O tshark é uma ferramenta de captura de pacotes . Você pode procurar algo como o Fiddler ou outra ferramenta de análise somente HTTP.
heavyd
Não estou familiarizado com o violinista, mas meu objetivo é rastrear a taxa de transferência da conexão. Quero saber requesttime / firstbyte / lastbyte, mantendo os cabeçalhos HTTP. O tshark já resolve a maior parte do meu problema, só preciso obter os cabeçalhos.
tzenes
3
Produz "tshark: filtro de captura inválido" (Tshark 2.0.2). Como solução alternativa, eu usei:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs 8/17
5

Na verdade você pode! Todas as respostas anteriores foram muito próximas. Tudo o que você precisa é de um -Osinalizador que filtra todas as informações, exceto HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443
Denis Bazhenov
fonte
1
Essa é a resposta correta.
Florin Andrei
3

Consegui combinar a resposta do @heavyd e executá-la através de um filtro sed que recebi de um artigo da SO - (resposta de FJ) para preparar esse bebê, que filtra apenas os cabeçalhos :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered
troca rápida
fonte
1
aterrorizante porque eu não consigo ler, mas funcionou como um encanto.
Setheron 22/0318
2

Minha própria versão de filtro para facilitar a leitura:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

Dessa forma, vejo apenas informações relevantes de IP e TCP, sem todo o material de baixo nível, além das informações HTTP completas.

Miquel Adrover
fonte
sudo tshark -V -s0 porta 80 -Y "(solicitação de http | resposta http.response)" | awk "/ Protocolo de transferência de hipertexto /, / ^ $ /"
Lmwangi