Existe uma ferramenta fácil de linha de comando para o pacote sniffing de um único comando no linux?


11

Eu adoraria se houvesse uma única ferramenta de linha de comando para farejar pacotes em um único comando no Linux. algo assim sniff dumpfile commandpara que você possa simplesmente executar o comando que deseja cheirar pacotes no terminal e obter um despejo dos pacotes em outro lugar.

Eu gostaria de despejar / salvar / ver apenas o tráfego de rede do comando único que eu insiro, nem todo o tráfego TCP na minha interface de rede única. Portanto, se eu estivesse conectado ao meu computador e tivesse o IRC em segundo plano sniff somefile wget http://www.google.com, eu gostaria de ver todo o tráfego de rede que o comando wget fez para baixar o http://www.google.com . Não quero que 'somefile' tenha o tráfego de rede do IRC confundindo as coisas.

Existem muitos comandos linux / unix que aceitam um comando diferente e fazem algo diferente. De sudo(executado como superusuário), nicealtere o bom nível trickle(limite a largura de banda de um comando)


1
O que exatamente você quer fazer? Deseja verificar se um determinado comando é executado? Deseja cheirar o tráfego de rede? Porque usar o 'packet sniffing um comando' frase não faz sentido para mim em tudo ...
wzzrd

wzzrd, ver pergunta expandiu
Rory

Respostas:


10

Não tenho nada que eu saiba, mas teoricamente não deve ser difícil conseguir algo parecido. Strace pode ser usado para interceptar chamadas de rede.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Isso fornecerá informações sobre os dados enviados entre o kernel e o processo. A saída do strace não é exatamente o que você deseja. No entanto, o strace usa o ptrace syscall para interceptar chamadas do sistema. Pode ser possível escrever um programa para produzir os dados um pouco mais úteis.

Como alternativa, você também pode interceptar o soquete útil, ligar e ouvir syscalls. Pode ser possível escrever um pequeno programa que use ptrace nessas chamadas e libpcap para alterar dinamicamente o filtro de captura toda vez que um novo soquete for aberto.


Seria ótimo se produzisse algo que o Wireshark pudesse ler.
22410 Brad Gilbert

Lembre-se de que o traço descrito acima é preciso para o Solaris (e possivelmente outros departamentos comerciais). No Linux, strace é um rastreador de chamadas do sistema, semelhante em operação e saída a treliça no Solaris ou tusc no HP-UX.
James F

1
Eu descrevi strace no Linux.
David Pashley


4

Experimente o Wireshark - o comando será tshark

  • O tshark permite selecionar filtros no tráfego capturado a partir de uma interface
  • use outros utilitários como o debian lsof para identificar o tipo de comunicação feita por sua aplicação de interesse.

Ou você realmente quer apenas o LSOF?


Eu não acho que exista uma ferramenta que continue a filtrar dinamicamente todas as comunicações associadas a um processo. No entanto, você pode tentar rastrear as comunicações do processo com ferramentas como lsofe, depois de ter um bom filtro que possa isolar a comunicação desse processo de todos os outros tráfegos em execução no sistema, você poderá obter a captura correta.

Por exemplo, wgetnormalmente, o endereço IP de destino é diferente de outro tráfego relacionado ao processo. Mesmo se você pegar algo como skypeo intervalo da porta de destino, geralmente é corrigido para uma instância.


Isto é um pouco como o princípio da incerteza. Geralmente, você pode saber o que está passando por um conjunto de caminhos de comunicação (com um sniffer filtrando em um grupo de fluxos identificado) ou onde diferentes links de comunicação estão sendo feitos (com lsof).

Eu realmente gostaria de saber se as duas podem ser feitas para um aplicativo. Eu acho que deveria ser viável. Mas, ainda não vi nenhuma ferramenta fazer isso.


lsof é incrível, mas prefiro ver o que está fazendo / enviando / recebendo.
Rory

4

Aprenda a usar expressões de filtro.

Enquanto isso não vai fazer as coisas de fantasia que você está pedindo.

Isso permitirá que você remova quase todas as "coisas confusas como o IRC" da captura.

Além disso, é muito útil conhecer a sintaxe do filtro para referência rápida no futuro.


2

Especificamente para um navegador / página da Web, algo como o plug-in Firebug para Firefox pode fornecer algumas das informações que você está procurando: http://getfirebug.com/net.html

Para aplicativos mais gerais, pode ser necessário usar o netstat para identificar as portas usadas pelo aplicativo e depois o Wireshark / tshark / dtrace com um filtro para capturar apenas esse tráfego. Não é a resposta de uma linha que você estava procurando ...


1

Uma ideia, tente o VMWare

-configure uma vm -configure
essa vm para usar uma interface específica
-niff nessa interface a partir do host (é como um homem no ataque do meio)

Se você isolar quais aplicativos de rede estão executando nessa vm, poderá ter sua resposta

Uma solução mais ideal, suponho, é fazer o que o VMWare faz em termos de como ele especifica como escolhe uma interface para conversar. Eu acho que sua mágica vem dos módulos do kernel que ele usa, nesse caso, provavelmente do módulo do kernel vmnet.

Que eu saiba, os aplicativos não estão cientes de qual interface eles falam e acredito que seja por design; eles não deveriam ter que se preocupar com essas coisas.

Além disso,
talvez já exista um programa, não sei. Mas se um foi escrito, você pode chamá-lo de nettrace (por exemplo) e Usage pode ser como

interface do programa nettrace

depois cheire a interface usada e adicione rotas (talvez faça automaticamente) à sua interface real


sim, isso seria possível. No entanto, seria ótimo se houvesse uma ferramenta simples e rápida para fazer isso.
Rory

Talvez seja hora de esta ferramenta simples? Gostaria de saber se seria tão difícil, provavelmente o vmnet mod poderia ser um bom ponto de partida (embora eu não saiba se haverá problemas de licenciamento). Talvez (um hack) use apenas o vmnet mod. Sei que estou interessado em perguntas como essa com frequência.
rev

1

Supondo que você seja a única pessoa na caixa que está tentando se conectar ao google na época, eu acho que algo assim deveria fazer o truque:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Se você não é a única conexão que está tentando se conectar ao google na caixa, se você pode identificar o IP / porta da qual está se conectando, também pode especificar a porta src / src ip.

Identificar a porta src pode ser um problema, a menos que você possa especificá-la em qualquer cliente que você usar. Não tenho certeza se você pode com o wget.

Eu suspeito fortemente que você pode especificar as portas src e dst com, netcatportanto, se realmente era do google, você poderia fazer seu GET (manualmente) através do netcat.

Claro que a página de manual lhe dará detalhes


1

A página de manual do tcpdump e muitos sites oferecem exemplos detalhados de filtros, e existem até alguns repositórios online de expressões de filtro do tcpdump. Ele deve ser capaz de fazer quase tudo o que você pode sonhar, supondo que você saiba algo sobre o tráfego de rede (origem, destino, portas, protocolos etc.) além do programa que o está gerando.

Se você estiver trabalhando em um servidor ou em uma caixa decapitada, sempre poderá fazer com que o tcpdump grave um arquivo de despejo e, em seguida, abra-o no Wireshark na estação de trabalho e obtenha filtragem avançada e uma interface gráfica.


Erm, qual opção para o comando tcpdump o limitaria a um único aplicativo que gera o tráfego?
Milan Babuškov 22/06/2009

1

Talvez este script faça o que você deseja com as modificações apropriadas no comando tshark:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Leia o arquivo de despejo posteriormente:

tshark -r dump

Você está capturando a porta 8080, mas gerando tráfego na porta 80; isso não fará exatamente o que você pretende.
James F

James: Meu proxy se conecta ao 8080, foi assim que eu executei o script. Eu deveria ter mudado 80 para os fins deste post.
Não agora

0

O Dtrace deve permitir isso, embora eu ainda não saiba se ainda está no Linux.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.