2010-06-18 18 views
7

Estoy tratando de portar una aplicación MacOSX a Windows y me he encontrado con un problema con getifaddrs. Básicamente windows no lo admite. Estoy tratando de encontrar una forma de volver a implementarlo (para AF_INET y AF_INET6), pero la funcionalidad "equivalente" en Windows parece no tener nada que ver con la compatibilidad con MacOSX.Portando getifaddrs para Win XP

¿Alguien ha hecho este tipo de conversión antes? Si es así, ¿hay una buena manera de que pueda obtener ventanas para informarme la información de la interfaz como lo hace MacOSX?

Respuesta

12

Las funciones más cercanos en Windows son GetAdaptersInfo y GetAdaptersAddresses. La documentación de MSDN es bastante completa, por lo que debe encontrar todo lo que necesita.

+0

sí, yo vi esos. Sin embargo, estoy un poco inseguro sobre cómo obtener un índice de zona IPv6 a partir de esa información ... Sin embargo, puede haber pasado por alto lo obvio. – Goz

1

tal vez win32 port of libpcap puede ayudarlo?

(o puerto de libnet, si es que existe)

+0

Saludos Voy a echar un vistazo :) – Goz

5

getifaddrs() no es una solución portátil, por lo que si necesita admitir plataformas múltiples, debe considerar usar getaddrinfo, que es compatible con POSIX y Windows. Es un poco más complicado a primera vista, pero realmente no es tan malo. This SO question tiene algunas buenas respuestas y enlaces sobre el tema. (En particular, el ejemplo showip.c en Beej's page es muy útil, y here es un ejemplo de Windows; tenga en cuenta que le falta un #include <stdio.h> en la parte superior, y asegúrese de enlazar con Ws2_32.lib.)

+0

¿Por qué el voto a favor? Tengo mucha curiosidad por saber si he escrito algo incorrecto o engañoso. – patrickvacek

+0

La pregunta no se trata de resolver el nombre de host en direcciones IP. –

+0

@VasilyRedkin, ¿siguió los enlaces o leyó la página de manual de 'getaddinfo'? Esa función no solo convierte los nombres de host a direcciones IP. Se puede usar para informar información de interfaz de red; como mencioné en mi respuesta, vea el ejemplo de showip.c en [la guía de red de Beej] (http://beej.us/guide/bgnet/output/html/multipage/syscalls.html#getaddrinfo). – patrickvacek

Cuestiones relacionadas