2017-08-28 4 views
0

J'ai un système avec plusieurs NIC et donc plusieurs adresses IP et je dois utiliser un SDK dont l'initialisation nécessite mon adresse locale et l'adresse distante.C++ WinSock choisir l'interface locale pour la connexion

Je souhaite sélectionner automatiquement l'extrémité locale. En ce moment j'énumère toutes les adresses locales (via GetAdaptersAddresses) en vérifiant la meilleure correspondance (pour être correct je devrais utiliser le masque de sous-réseau). Mais étant donné que ce travail est effectué par la table de routage, y a-t-il une API Windows qui me donne une adresse distante qui me renvoie le bon point de terminaison local?

+0

Pourquoi avez-vous besoin de spécifier une adresse locale spécifique? Le SDK ne choisit-il pas automatiquement une interface locale appropriée lors de la connexion à l'adresse distante? Si vous devez spécifier une adresse, avez-vous essayé d'utiliser l'adresse générique '0.0.0.0' (IPv4) ou' :: '(IPv6)? Cela devrait laisser le système d'exploitation décider du meilleur itinéraire lorsque le SDK essaie de se connecter –

Répondre

2

Y at-il une API Windows qui donné une adresse distante me redonne le bon point de terminaison local?

Jetez un oeil à GetBestInterface() et GetBestInterfaceEx().

Les deux fonctions renvoient un index à une interface. Vous pouvez ensuite récupérer l'adresse IP de l'interface en énumérant les cartes réseau avec GetAdaptersInfo()/GetAdaptersAddresses() jusqu'à ce que vous trouviez un adaptateur avec un index d'interface correspondant.