2010-06-18 11 views
7

Ich versuche, eine MacOSX-App auf Windows zu portieren, und ich habe ein Problem mit gettifaddrs. Grundsätzlich unterstützt Windows es nicht. Ich versuche, einen Weg zu finden, es wieder zu implementieren (für AF_INET und AF_INET6), aber die "äquivalente" Funktionalität in Windows scheint nichts mit der MacOSX-Unterstützung zu zu tun.Portierung getifaddrs zu Win XP

Hat jemand diese Art der Konvertierung schon einmal gemacht? Wenn ja, gibt es einen netten Weg, wie ich Fenster bekommen kann, um mir Interface-Informationen wie MacOSX zu melden?

Antwort

12

Die nächsten Funktionen unter Windows sind GetAdaptersInfo und GetAdaptersAddresses. Die MSDN-Dokumentation ist ziemlich umfangreich, Sie sollten also alles finden, was Sie brauchen.

+0

Ja, ich sah diese. Ich bin jedoch etwas unsicher, wie ich einen IPv6-Zonenindex von dieser Information herbekomme ... Ich habe das Offensichtliche allerdings übersehen. – Goz

1

vielleicht Win32 Port von libpcap kann Ihnen helfen?

(oder Hafen von libnet, falls vorhanden)

+0

Prost i einen Blick werden :) – Goz

5

getifaddrs() ist keine portable Lösung. Wenn Sie also mehrere Plattformen unterstützen müssen, sollten Sie in Betracht ziehen, getaddrinfo zu verwenden, was POSIX- und Windows-freundlich ist. Es ist ein wenig komplizierter auf den ersten Blick, aber es ist wirklich nicht so schlimm. This SO question hat einige gute Antworten und Links zum Thema. (Insbesondere die showip.c Beispiel auf Beej's page ist sehr hilfreich, und here ist ein Beispiel für Windows, beachten Sie, dass es eine #include <stdio.h> an der Spitze fehlt, und sicher sein, gegen Ws2_32.lib zu verknüpfen.)

+0

Warum der Downvote? Ich bin extrem neugierig zu wissen, ob ich etwas falsch oder irreführend geschrieben habe. – patrickvacek

+0

Bei der Frage geht es nicht darum, den Hostnamen in die IP-Adresse (n) aufzulösen. –

+0

@VasilyRedkin, bist du den links gelaufen oder hast die man-seite für 'getaddinfo' durchgelesen? Diese Funktion übersetzt Hostnamen nicht nur in IP-Adressen. Es kann verwendet werden, um Netzwerkschnittstelleninformationen zu melden; Wie in meiner Antwort erwähnt, siehe das showip.c-Beispiel in [Beejs Netzwerkleitfaden] (http://beej.us/guide/bgnet/output/html/multipage/syscalls.html#getaddrinfo). – patrickvacek

Verwandte Themen