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

11

Eu adoraria se houvesse uma única ferramenta de linha de comando para o pacote sniffing de um único comando no Linux. algo como sniff dumpfile command , para que você possa executar o comando que deseja empacotar no terminal e obter um dump dos pacotes em outro lugar.

Gostaria de salvar / ver apenas o tráfego de rede do único comando que eu digitei, não todo o tráfego TCP na minha única interface de rede. Então, se eu estivesse logado no meu computador e tivesse o IRC rodando em segundo plano, e eu fizesse sniff somefile wget http://www.google.com , eu gostaria de ver todo o tráfego de rede que o comando wget fez para baixar link . Eu 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. A partir de sudo (executado como superusuário), nice alterar nível bom, trickle (limitar a largura de banda de um comando)

    
por Rory 22.06.2009 / 17:03

10 respostas

10

Não há nenhum que eu saiba, mas teoricamente não deveria ser difícil conseguir algo similar. Strace pode ser usado para interceptar syscalls de rede.

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

Isto lhe dará 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, strace usa o syscall ptrace para interceptar chamadas do sistema. Pode ser possível escrever um programa para produzir os dados de maneira um pouco mais útil.

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

    
por 22.06.2009 / 17:38
7

Tracedump

Tracedump is a single application IP packet sniffer, which captures all TCP and UDP packets of a single Linux process.

Download e descrição aqui: link

    
por 08.02.2012 / 14:33
3

Experimente o Wireshark - o comando será tshark

  • tshark permite que você selecione filtros no tráfego capturado de uma interface
  • use outros utilitários como o debian lsof para identificar o tipo de comunicação feita por sua inscrição de interesse .

Ou você realmente quer apenas LSOF?

Não acho que exista uma ferramenta que mantenha a filtragem dinâmica para toda a comunicação associada a um processo. No entanto, você pode tentar rastrear as comunicações do processo com ferramentas como lsof e, depois de ter um bom filtro capaz de isolar a comunicação desse processo de todos os outros tráfegos em execução no sistema, você pode obter a captura correta.

Por exemplo, com wget geralmente o endereço IP de destino é diferente de outro tráfego relacionado ao processo. Mesmo se você pegar algo como skype , o intervalo de portas de destino geralmente é fixo para uma instância.

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

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

    
por 22.06.2009 / 17:13
3

Aprenda a usar expressões de filtro.

Embora isso não faça o rastreio que você está pedindo.

Ele 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.

    
por 22.06.2009 / 17:49
2

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

Para aplicações mais gerais, você pode precisar usar o netstat para identificar as portas usadas pelo aplicativo e, em seguida, o Wireshark / tshark / dtrace com um filtro para capturar apenas esse tráfego. Não é a resposta de uma linha que você estava procurando embora ...

    
por 22.06.2009 / 20:10
1

Uma ideia, tente o VMWare

-setup a vm
-configure que vm use uma interface específica
-sniff nessa interface do host (é como um homem no meio ataque)

Se você isolar quais aplicativos de rede estão sendo executados nessa VM, você pode ter sua resposta

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

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

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

interface do programa nettrace

depois, cheire a interface que ela usa e adicione rotas (talvez faça automaticamente) à sua interface real

    
por 22.06.2009 / 17:56
1

Supondo que você é a única pessoa na caixa tentando se conectar ao Google no momento, eu pensaria 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 tenta se conectar ao Google na caixa, então se você puder identificar o IP / porta que você está conectando você 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ê usa. Eu não tenho certeza se você pode com wget.

Suspeito que você pode especificar as portas src e dst com netcat , por isso, se fosse realmente o Google em que você estava interessado, você poderia fazer o seu GET (manualmente) através do netcat.

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

    
por 22.06.2009 / 18:10
1

Talvez este script faça o que você deseja com 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 mais tarde:

tshark -r dump
    
por 22.06.2009 / 19:22
0

O Dtrace deve permitir isso, embora eu não saiba se já chegou ao Linux.

    
por 22.06.2009 / 17:06
0

A man page do tcpdump e muitos sites da Web fornecem exemplos detalhados de filtros, e há até mesmo alguns repositórios online de expressões de filtros do tcpdump. Ele deve ser capaz de fazer praticamente qualquer coisa com a qual você possa sonhar, desde que você saiba algo sobre o tráfego da rede (origem, destino, portas, protocolos, etc.) além do programa que está sendo gerado.

Se você está trabalhando em um servidor ou headless box, você sempre pode ter o tcpdump gravar um arquivo de dump e depois abri-lo no Wireshark em sua estação de trabalho e obter filtragem avançada e uma interface gráfica.

    
por 22.06.2009 / 19:09