Maneira fácil de “editar” o tráfego proveniente de um host tcp (linux)

8

Eu preciso fazer algumas pequenas modificações no tráfego de entrada de um host tcp conhecido: port antes do processo manipular a conexão para obter o fluxo.

Por exemplo, deixe 192.168.1.88 ser um host remoto que executa um servidor web.
Eu preciso disso, quando um processo no meu host local recebe dados de 192.168.1.88:80 (por exemplo, o navegador), os dados são alterados pela primeira vez substituindo text-A por text-B , assim:

  • 127.0.0.1: ... conecta-se a 192.168.1.88:80
  • 127.0.0.1: ... envia para 192.168.1.88: 80:

    GET /
    
  • 192.168.1.88:80 envia para 127.0.0.1: ...:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-A, some other text
    
  • Esses dados são um pouco interceptados pelo sistema e passados para um programa cuja saída é:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-B, some other text
    
  • o sistema fornece os dados assim alterados para o processo que manipula 127.0.0.1: ..., como se viesse de 192.168.1.88:80.

Supondo que eu tenha uma maneira baseada em fluxo para fazer isso (usando sed , por exemplo), qual é a maneira mais fácil de pré-processar o fluxo de entrada tcp?

Eu acho que isso envolveria iptables , mas eu não sou muito bom nisso.

Observe que o aplicativo deve se sentir para lidar com o host original, portanto, configurar um proxy provavelmente não é uma solução.

    
por etuardu 06.10.2011 / 05:54

3 respostas

21

Use proxies netsed e iptables.

iptables -t nat -D PREROUTING -s yourhost -d desthost -p tcp --dport 80 -j REDIRECT --to 10101

Em seguida, execute:

netsed tcp 10101 desthost 80 s/text-A/text-B

NetSED é um utilitário pequeno e prático projetado para alterar, em tempo real, o conteúdo dos pacotes encaminhados através do seu rede. É realmente útil para alteração, forjamento ou manipulação de pacotes de rede. O NetSED suporta:

  • auditoria de protocolo de caixa preta - sempre que houver duas ou mais caixas proprietárias se comunicando usando algum protocolo não documentado. Ao impor mudanças nas transmissões em andamento, você poderá testar se o aplicativo examinado pode ser solicitado como seguro.

  • gerando experimentos de fuzz, testes de integridade - sempre que você faz testes de estabilidade de um aplicativo para ver como ele se importa com a integridade dos dados;

  • outros casos de uso comuns: transferências enganosas, filtragem de conteúdo, conversão de protocolo - o que melhor se adequar à sua tarefa.

por 15.10.2011 / 03:35
5

Você pode fazer exatamente isso usando o iptables para conexões de proxy transparentes através de um proxy squid , e depois ter o squid reescreve o conteúdo http para você.

    
por 13.10.2011 / 00:05
2

iptables + o uso de libnetfilter_qu é outra opção que fará o que você deseja:

"... [reinject] pacotes alterados para o subsistema nfnetlink_queue do kernel."

Provavelmente, você terá mais capacidade de extensão, pois cabe a você codificar o software.

um wrapper python disponível também.

    
por 16.10.2011 / 05:35