Estou tentando depurar um serviço ao qual os clientes se conectam usando TCP (no Linux). Eu não posso mudar nenhum dos programas (não tenho código fonte), e eu não posso fazer uso de mecanismos que bisbilhotam na camada de rede (como tcpdump, pcap, wireshark, etc).
Eu posso configurar cada um dos programas de serviço e cliente para ouvir ou conectar em qualquer porta ou endereço que eu precise.
Eu sei que é possível usar o programa SOCAT para encaminhar conexões arbitrárias, usando um comando como SOCAT -d -d TCP-LISTEN:2001,bind=127.0.0.1,fork TCP:localhost:2002
. Mas não vejo que as versões padrão da socat possuam qualquer mecanismo para registrar os dados à medida que vão e voltam.
O que eu preciso é uma maneira de encaminhar uma conexão TCP dessa maneira, mas registrando os dados em ambas as direções em um arquivo (bem, um par de arquivos). O ideal seria que essa estratégia usasse apenas pacotes Linux de ações, como socat ou tee.
Eu percebo que provavelmente é possível escrever um programa que faz isso usando Perl ou Python ou similar, mas para os fins desta questão, eu quero uma maneira de usar apenas cola (bash, etc) e programas de ações.