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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top