Não é possível ver pacotes chegando no soquete do aplicativo que foram vistos pelo Wireshark

3

Usando o Ubuntu 14

Eu tenho uma máquina Linux onde existem duas interfaces: eth1: 172.16.20.1 ppp0: 192.168.0.2

O ppp0 é conectado a um dispositivo que possui uma interface PPP (192.168.0.1) e uma interface WAN (172.16.20.2). Eu posso verificar se este dispositivo pode alcançar 172.16.20.1

O problema que estou tendo é se eu enviar um pacote usando Python na mesma máquina:

client.py

import socket
cl = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cl.sendto("Hello", ("172.16.20.1", 5005))

server.py

import socket
srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srv.bind(("", 5005))
while True:
    data, addr = srv.recvfrom(2048)
    print("Message: ", data)

o script funciona bem, mas não consigo ver o pacote no Wireshark saindo da eth1 (só consigo ver quando escolho capturar na interface lo). Eu assumo que o sistema operacional detectou que o pacote é para uma de suas interfaces locais e não o envia através do soquete 192.168.0.2 criado.

Quando adiciono as seguintes regras para evitar que isso aconteça:

sudo ip route del table local 172.16.20.1 dev eth1
sudo ip route add table local 172.16.20.1 dev ppp0
sudo ip route flush cache

O que acontece é:

  • Eu posso ver os pacotes no Wireshark chegando agora na eth1, o endereço de origem é o endereço da WAN (172.16.20.2)
  • Não consigo ver nenhuma saída do server.py depois de reiniciar o programa.

Ignorando a interface ppp0 e usando duas interfaces ethx: Se eu tentar executar o programa em duas máquinas separadas (cliente e servidor) (sem aplicar as regras), posso ver os pacotes chegando à eth1 no Wireshark e a saída em server.py. Se eu tentar executar o programa em duas máquinas separadas E eu aplicar as regras acima para a conexão ppp0 (não a removi), não consigo mais ver nenhuma saída do server.py, mas ainda consigo ver pacotes chegando no Wireshark. Meu conhecimento da pilha TCP / IP não é bom, mas parece que a camada de link não está mais encaminhando para a camada de aplicativo?

    
por nnja 17.01.2018 / 05:09

1 resposta

0

it looks like the link layer is no longer forwarding to the application layer

A camada de enlace não é o problema; não é afetado pela sua configuração. Isso é sobre a camada de rede (IP).

A tabela local é a maneira do kernel determinar se um pacote pode ser entregue localmente. Você exclui o endereço IP, o pacote é roteado ou descartado.

Eu acho que isso funciona apenas porque o endereço MAC está no cache ARP do outro sistema. Eu esperaria que o sistema de recebimento não respondesse às solicitações ARP se o endereço estivesse faltando na tabela local.

    
por 17.01.2018 / 08:48