Envia o pacote TCP para a mesma fonte [fechado]

1

Eu quero projetar um sistema que reduza o tempo de viagem do pacote o que está acontecendo na realidade é que eu envio um bit SYN do lado do cliente, este bit via roteador e servidor SYN + ACK que também viaja pelo roteador para o cliente.

Então eu só quero outra coisa como se o cliente mandasse SYN para roteador, roteador, em seguida, enviasse para o servidor e copiasse este pacote, modifique SYN para SYN + ACK e envie de volta para o cliente antes que o servidor possa enviar o servidor SYN + ACK ao roteador, roteador apenas aceitá-lo (ver como a resposta está chegando) e descartá-lo

Para atingir o objetivo acima, eu projeto uma configuração na qual eu tenho um laptop que envia e recebe pacotes de duas interfaces ethernet e outro é o desktop que atua como roteador (pacotes estão chegando e só encaminham para o destino) Eu configurar a tabela de roteamento de ambos os lados e habilitar o encaminhamento de ip no desktop (que atuam como roteador).

Todos estão funcionando bem, em um laptop eu tenho servidor e programa cliente que enviam o pacote e o recebem, mas o problema é que eu quero enviar os pacotes de onde ele estava chegando (para se auto-instalar) então modifico o pacote pacote no lado de roteamento usando o módulo netfilter, copie todo o skb (usando skb_copy) e troque sua origem e destino ip (eu fiz isso em NF_INET_PREROUTING) e também troque o número da porta mas o pacote sempre vai para o destino.

Que outras modificações eu preciso fazer para enviar o pacote para sua própria fonte?

    
por ASid13 06.08.2018 / 07:34

2 respostas

0

O TCP usa contadores de seqüência diferentes em ambas as extremidades da conexão. Então, se você simplesmente enviar um pacote completo de volta, ele terá o número de sequência incorreto e será rejeitado na outra extremidade, porque a outra extremidade acha que é um pacote duplicado que ficou atrasado, etc.

No entanto, você pode enviar o conteúdo de um pacote de volta, se é isso que você deseja. Uma maneira simples de fazer isso é com socat . Teste o seguinte em duas janelas de terminal. Em um, faça

socat TCP-LISTEN:9990 SYSTEM:"cat"

Isso escutará as conexões de entrada e, quando uma conexão for estabelecida, canalizará os dados de entrada para cat , que produzirá os mesmos dados, que então serão transmitidos através da conexão TCP.

No outro, faça

socat - TCP:localhost:9990

Isso se conectará ao primeiro socat na porta 9990, enviará stdin para ele e escreverá o responsável para stdout . Digite algumas linhas (o stdin só envia linhas no CR) e observe-as voltando.

Você pode usar isso para testar sua configuração, se essa foi a ideia. Você também pode usar algo semelhante para enviar tudo de volta ao servidor:

socat TCP:server.com:1234 SYSTEM:"cat"

Mas isso exige que o servidor realmente envie algo ao se conectar.

Se isso não resolver o seu problema, edite sua pergunta e explique por que você deseja enviar "pacotes" e qual problema deseja resolver enviando de volta "pacotes". (Teste sua configuração? Teste o servidor? Outra coisa?).

Isso se parece muito com um problema XY .

    
por 06.08.2018 / 08:17
0

Como a pergunta mudou completamente, outra resposta:

Enviar SYN + ACK de volta ao cliente antes que o servidor realmente receba o SYN é o que um synproxy faz. Google para implementações existentes.

Isso não tem nada a ver com "enviar pacotes de volta", é apenas sobre o processamento inicial de SYN / ACK.

E não, não é possível fazer isso com regras de firewall, porque ele precisa manter o estado (ou pelo menos uma certa quantidade de estado).

    
por 06.08.2018 / 09:50