2010-06-18 20 views
7

Próbuję przenieść aplikację MacOSX do systemu Windows i natknąłem się na problem związany z getifaddrs. Zasadniczo system Windows go nie obsługuje. Próbuję wymyślić sposób na ponowne wdrożenie go (dla AF_INET i AF_INET6), ale "równoważne" funkcjonalności w systemie Windows wydaje się być niczym w obsłudze MacOSX.Przenoszenie getifaddrs do Win XP

Czy ktoś wcześniej dokonał tego rodzaju konwersji? Jeśli tak, to w jaki sposób mogę uzyskać dostęp do informacji o moim interfejsie, takich jak MacOSX?

Odpowiedz

12

Najbliższe funkcje w systemie Windows są GetAdaptersInfo i GetAdaptersAddresses. Dokumentacja MSDN jest dość obszerna, więc powinieneś znaleźć wszystko, czego potrzebujesz.

+0

Tak, widziałem je. Nie jestem jednak pewien, jak uzyskać indeks strefy IPv6 z tych informacji ... Możliwe, że przegapiłem oczywiste. – Goz

1

Może port winp32 lib32 może Ci pomóc?

(albo portu libnet, jeśli taki istnieje)

+0

Cheers będę spojrzeć :) – Goz

5

getifaddrs() nie jest rozwiązaniem przenośnym, więc jeśli potrzebujesz obsługi wielu platform, powinieneś rozważyć użycie getaddrinfo, która jest zgodna z POSIX- i Windows. Na pierwszy rzut oka jest to nieco bardziej skomplikowane, ale tak naprawdę nie jest tak źle. This SO question ma kilka dobrych odpowiedzi i linków na ten temat. (W szczególności, na przykład showip.cBeej's page jest bardzo pomocne, a here jest przykładem systemu Windows; pamiętać, że jest ona brakuje #include <stdio.h> na górze, i pamiętaj, aby połączyć przeciwko Ws2_32.lib).

+0

Dlaczego upadek? Jestem bardzo ciekawy, czy napisałem coś niepoprawnego lub wprowadzającego w błąd. – patrickvacek

+0

Pytanie nie dotyczy rozdzielania nazwy hosta na adres (y) ip. –

+0

@ VasilyRedkin, czy śledziłeś linki lub czytałeś stronę man dla 'getaddinfo'? Ta funkcja nie tylko tłumaczy nazwy hostów na adresy IP. Może służyć do raportowania informacji o interfejsie sieci; jak wspomniano w mojej odpowiedzi, zobacz przykład showip.c na [przewodniku sieciowym Beej] (http://beej.us/guide/bgnet/output/html/multipage/syscalls.html#getaddrinfo). – patrickvacek