8
votes

Portant GetifadDRS pour gagner XP

J'essaie de porter une application MacOSX à Windows et je suis arrivé à un problème autour de GeifadDRS. Fondamentalement, Windows ne le supporte pas. J'essaie de trouver un moyen de le ré-implémenter (pour AF_INET et AF_INET6), mais la fonctionnalité "équivalente" sur Windows ne semble être rien comme le support MacOSX.

Quelqu'un a-t-il déjà fait ce genre de conversion? Si oui, y a-t-il un bon moyen, je peux obtenir Windows pour signaler des informations d'interface me comme MacOSX?


0 commentaires

4 Réponses :


1
votes

Peut-être que Win32 port de libpcap peut vous aider?

(ou port de libnet, si on existe)


0 commentaires

12
votes

Les fonctions les plus proches des fenêtres sont gettapaptersinfo et gettadaptersAdresses . La documentation MSDN est assez complète, vous devriez donc trouver tout ce dont vous avez besoin.


1 commentaires

Ouais j'ai vu ceux-là. Je suis peu sûr de savoir comment obtenir un index de la zone IPv6 de cette information si ... j'ai peut-être manqué l'évident cependant.



3
votes

Je l'ai fait ici, y compris une version séparée pour le vin car les routines agnostiques de la version IP ne fonctionnent pas comme prévu ,

http://code.google .COM / P / OPENPGM / Source / Parcourir / Trunk / OpenPGM / PGM / GETIFADDRS.C

Licence LGPL 2.1

EDIT: Le vin 1.3 corrige les problèmes rencontrés avec l'API conviviale IPv4 & IPv6.


0 commentaires

6
votes

geifaddrs () n'est pas une solution portable, donc si vous devez prendre en charge plusieurs plates-formes, vous devez envisager d'utiliser gettaddrinfo , qui est convivial de POSIX et Windows. C'est un peu plus compliqué à première vue, mais ce n'est vraiment pas si mal. Cette question à ce sujet a de bonnes réponses et de bonnes réponses sur le sujet. (En particulier, le showip.c exemple sur La page d'abej est assez utile et ici est un exemple de Windows; Notez qu'il manque un #include en haut et assurez-vous de Lien contre ws2_32.lib .)


8 commentaires

Pourquoi le bowvote? Je suis extrêmement curieux de savoir si j'ai écrit quelque chose de mal incorrect ou trompeur.


La question ne concerne pas la résolution du nom d'hôte dans l'adresse IP (ES).


@VasilyRedkin, avez-vous suivi les liens ou lisez la page d'homme pour gettaddinfo ? Cette fonction ne traduit pas seulement les noms d'hôte en adresses IP. Il peut être utilisé pour signaler les informations d'interface réseau; Comme mentionné dans ma réponse, voir l'exemple showIP.co sur Beej's Guide de réseau .


Oui, j'ai lu la page man à Getaddrinfo (3) sur Linux et FreeBSD et j'ai lu exemple Shoip sur l'article lié. Aussi, j'ai lu la mise en œuvre de Glibc code source et manuel GettaDdrinfo dans MSDN .


Seuls L'article d'article MSDN, que "si le paramètre Pnodename pointe vers un nom d'ordinateur, toutes les adresses permanentes de l'ordinateur pouvant être utilisées comme une adresse source sont renvoyées. Sous Windows Vista et plus tard, ces adresses seraient Incluez toutes les adresses IP de Unicast renvoyées par les fonctions GetUnicastiPaddRESTABLE ou GetUnicastiPadDressien dans lesquelles le membre Spanassource est défini sur False dans la structure MIB_UNICASTIPADDRESS_ROW ". Votre réponse est donc partiellement vraie pour Windows uniquement.


@VasilyRedkin, ce lien ne ressemble pas à la mise en œuvre de GLIBC de gettaddrinfo , ou si elle est obsolète. Essayez Ce lien . Si vous utilisez réellement gettaddrinfo sur n'importe quelle plate-forme, vous verrez qu'il renvoie effectivement les adresses IP pour chaque interface que la fonction peut trouver. Vous devez fournir un nom d'hôte ou un service, mais gethostname est une méthode simple et portable pour atteindre ces extrémités. L'OP demandait à propos de Windows, mais cela fonctionne également sur les systèmes conviviaux de POSIX.


D'accord, mauvais lien. J'ai été dupé par Google :) honte sur moi. On dirait que tu as raison. Quoi qu'il en soit, pourquoi ce comportement n'est pas documenté dans les pages de l'homme?


@VasilyRedkin, vous n'êtes pas faux que la page de l'homme est difficile à donner un sens. Cette ligne est peut-être la partie pertinente de la clé: "La fonction gettaddrinfo (3) crée une liste liée des structures Addrinfo, une pour chaque adresse de réseau soumise à toutes les restrictions imposées par le paramètre Itins."