Em qual adaptador acabei de receber esse pacote UDP?
-
20-09-2019 - |
Pergunta
Estou tentando escrever um servidor Bootp em C#.
Estou recebendo e analisando o pacote de bootp do cliente e preciso responder com o endereço IP do meu servidor.
O problema é:
- O computador pode ter vários adaptadores de rede
- O cliente ainda não tem um endereço IP
Existe alguma maneira de descobrir em que adaptador o pacote UDP foi recebido?
Solução
Existem algumas maneiras possíveis de fazer isso. Ligue um soquete separado em cada IP em cada interface física, então você sempre saberá em qual interface o pacote chegou. Você também pode experimentar o sinalizador ip_recvif, juntamente com a função de soquete RECVMSG, embora eu não saiba se isso é suportado no Windows. A Steven's tem exemplos na seção 22.2 e 22.6 da programação da rede Unix. Você pode usar o sinalizador Siocgifconf com o IOCTL para obter uma lista de interfaces na máquina. Existe um programa de exemplo na Seção 17.6 UNP. Se o C# não fornecer acesso a essas funções, mas o seu suporte no Windows, você poderá escrever um programa C simples para coletar e atualizar as informações da interface / IP e usar o MMAP para compartilhar uma região de memória entre o seu programa C# e o enumerador da interface.