Eu quero uma maneira simples de mostrar todos os dados TCP (não os cabeçalhos TCP ou qualquer outra coisa) passando por qualquer interface na minha caixa Linux.
Por exemplo, eu quero um comando mágico que, se eu fizer:
magic_commmand_I_want port=1234
se houvesse um servidor escutando na porta 1234 na minha máquina e alguém o fizesse:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Então o comando mágico seria impresso:
hello
Eu tentei "tcpdump", "ethereal", "tethereal", "tshark" e outros, mas não é óbvio como você os leva a:
- não mostrar endereços IP ou outros metadados
- mostra apenas os "dados" enviados, não os pacotes individuais e seus cabeçalhos
- imprima os dados como estão, não em hexadecimal e não com marcadores de deslocamento de pacote
- cheirar todo o tráfego de rede (seja em eth0 ou eth1 ou lo , etc ...)
Sim, você provavelmente poderia reunir um conjunto de comandos unix para fazer isso, mas isso não é muito fácil de lembrar da próxima vez :)
Se você tem um exemplo simples de uma linha de comando exata que faz isso, é isso que eu gostaria.
linux
networking
Dustin Boswell
fonte
fonte
Respostas:
Atualizar:
Conforme apontado por Michal nos comentários: No tcpflow versão 1.3, a opção -e é usada para especificar o nome do scanner. Portanto, o erro "Nome inválido do scanner '8983'" é impresso. O comando correto é
sudo tcpflow -i any -C -J port 1234
(também
-J
foi alterado para-g
na versão mais recente)Obrigado a yves por me apontar para " tcpflow ". Aqui está a linha de comando:
Isso faz tudo que eu quero
O "
-C
" diz para despejar no console em vez de em um arquivo. O "-e
" ativa as cores para que cliente-> servidor e servidor-> cliente sejam visualmente distintos.Eu instalei o tcpflow simplesmente fazendo
fonte
-e
opção é usada para especificar o nome do scanner. Portanto, o erro "Nome inválido do scanner '8983'" é impresso. O comando correto ésudo tcpflow -i any -C -J port 1234
-J
foi alterado para-g
nas versões mais recentes.socat é a ferramenta que você está pedindo. Pode atuar como um proxy:
seu aplicativo deve conectar a porta 4444 em vez de conectar-se diretamente à 1234
A opção -v é para o socat imprimir tudo o que recebe no erro padrão (stderr).
Atualizar:
Se o socat não estiver disponível em sua máquina, você ainda pode emular dessa maneira com o netcat:
advertências: essa opção é unidirecional. a segunda instância do netcat imprimirá qualquer resposta do seu servidor para a saída padrão. Você ainda pode fazer:
fonte
Experimente o Wireshark . É um excelente analisador de protocolo direcionado para Linux e Windows.
fonte
tcpflow é o que você deseja. Extrair da página do manual:
Configure uma conexão do aplicativo para o servidor. Quando a conexão estiver em funcionamento, o tcpflow ainda poderá capturar dados dela. Por exemplo:
Todos os dados serão armazenados em um arquivo chamado 127.000.000.001.48842-127.000.000.001.05555.
Você ainda pode redirecionar isso na saída padrão com a opção -Cs. Leia a página do manual para brincar com a expressão e ajustar os paquets que você deseja que o tcpflow capture.
fonte
ngrep
é muito bom para isso. É necessária uma cadeia BPF e uma cadeia opcional para pesquisar nos pacotes e depois despeja o conteúdo do pacote para a tela em um formato bastante útil. Opcionalmente, também despeja em um arquivo pcap_dump que você pode examinar mais de perto no Wireshark posteriormente.fonte
Dê uma olhada no Chaosreader . Embora faça um pouco mais do que você solicita e um pouco diferente, provavelmente você pode modificar o código para fazer o que quiser.
fonte
Talvez você possa escrever um wrapper para o tcpdump, por exemplo, que removerá todas as informações redundantes
fonte