2010-02-15 4 views
3

J'essaye d'écrire un serveur BOOTP dans C#.Sur quel adaptateur ai-je reçu ce paquet UDP?

Je reçois et analyse le paquet BOOTP du client et je dois répondre avec mon adresse IP du serveur.

Le problème est:

  • L'ordinateur peut avoir plusieurs cartes réseau
  • Le client ne dispose pas encore d'une adresse IP

est-il un moyen de savoir quel adaptateur le Le paquet UDP a été reçu?

Répondre

2

Il existe plusieurs façons de procéder. Liez une socket distincte sur chaque IP sur chaque interface physique, vous saurez alors toujours sur quelle interface le paquet est arrivé. Vous pouvez également essayer l'indicateur IP_RECVIF avec la fonction de socket recvmsg, bien que je ne sache pas si cela est pris en charge sur Windows. Steven a des exemples dans les sections 22.2 et 22.6 de Unix Network Programming. Vous pouvez utiliser l'indicateur SIOCGIFCONF avec ioctl pour obtenir une liste d'interfaces sur la machine. Il y a un exemple de programme dans la section 17.6 de l'UNP. Si C# ne vous donne pas accès à ces fonctions mais qu'elles sont supportées sous Windows, vous pouvez écrire un simple programme C pour collecter et mettre à jour les informations d'interface/IP, puis utiliser mmap pour partager une région mémoire entre votre programme C# et l'énumérateur.

+1

La liaison à chaque port séparément fonctionnerait bien! – Tim