Como dice el título, he intentado lograr eso la mayor parte del día. Cualquier ayuda sería apreciada.¿Cómo enumero los adaptadores de red y obtengo sus direcciones MAC en Win32 API C++?
10
A
Respuesta
8
Este código debería funcionar:
{
ULONG outBufLen = 0;
DWORD dwRetVal = 0;
IP_ADAPTER_INFO* pAdapterInfos = (IP_ADAPTER_INFO*) malloc(sizeof(IP_ADAPTER_INFO));
// retry up to 5 times, to get the adapter infos needed
for(int i = 0; i < 5 && (dwRetVal == ERROR_BUFFER_OVERFLOW || dwRetVal == NO_ERROR); ++i)
{
dwRetVal = GetAdaptersInfo(pAdapterInfos, &outBufLen);
if(dwRetVal == NO_ERROR)
{
break;
}
else if(dwRetVal == ERROR_BUFFER_OVERFLOW)
{
free(pAdapterInfos);
pAdapterInfos = (IP_ADAPTER_INFO*) malloc(outBufLen);
}
else
{
pAdapterInfos = 0;
break;
}
}
if(dwRetVal == NO_ERROR)
{
IP_ADAPTER_INFO* pAdapterInfo = pAdapterInfos;
while(pAdapterInfo)
{
IP_ADDR_STRING* pIpAddress = &(pAdapterInfo->IpAddressList);
while(pIpAddress != 0)
{
//
// <<<<
// here pAdapterInfo->Address should contain the MAC address
// >>>>
//
pIpAddress = pIpAddress->Next;
}
pAdapterInfo = pAdapterInfo->Next;
}
}
free(pAdapterInfos);
return false;
}
4
sólo tiene que dominar la API IPHelper ... esto es un enlace a get you started, con ejemplos haciendo justo lo que necesita.
Cuestiones relacionadas
- 1. C++: ¿Obtener la dirección MAC de los adaptadores de red en Vista?
- 2. Diferenciar el adaptador de red VMware de los adaptadores físicos de red -o-- Detectar el adaptador de red virtual
- 3. ¿Cómo enumero todas las propiedades en un objeto y obtengo sus valores?
- 4. Enviar mensaje de difusión desde todos los adaptadores de red
- 5. Direcciones MAC en JavaScript
- 6. Llamadas de API de Mocking y Win32
- 7. Cómo extraer automáticamente las declaraciones API de Win32 en C#?
- 8. Cómo convertir CIDR a la red y el rango de direcciones IP en C#?
- 9. C++ Win32 API documentación fuera de línea?
- 10. Descubrimiento de red en una Mac
- 11. ¿Cómo enumero los complementos cargados en Vim?
- 12. Cómo saber los detalles de la conexión a Internet con Visual C++ Win32 API
- 13. ¿Cómo enumero todos los yanks en emacs?
- 14. ¿Cómo obtengo información de hardware en Linux/Unix?
- 15. Ruby win32 api interface
- 16. elección entre win32 API y .NET framework
- 17. ¿Cómo obtengo el texto seleccionado de la ventana enfocada usando la API Win32 nativa?
- 18. ¿hay espacio de direcciones MAC privadas?
- 19. Ormlite, listViews y adaptadores?
- 20. ¿Cómo enumero programáticamente todos los proyectos en una solución?
- 21. ¿Cómo crear hilos con Win32 API?
- 22. Direcciones IP para dominios y sus subdominios de la misma?
- 23. Gui's con Win32 API
- 24. Diferencia entre PathAppend y PathCombine en Win32 API
- 25. Funciones de Win32 API vs. sus contrapartes CRT (ej. CopyMemory vs. memcpy)
- 26. ¿Cómo enumero todos los campos de un objeto en Objective-C?
- 27. ¿Cómo matar procesos por nombre? (Win32 API)
- 28. Llevando la ventana al frente en C# usando Win32 API
- 29. Cómo hacer varias ventanas usando Win32 API
- 30. Direcciones MAC fijas en máquinas Windows EC2
¿Por qué asignar pAdapterInfos usando mallock en lugar de stack? – user626528
Como el búfer es más grande, solo esa estructura. El ciclo actualiza el parámetro de tamaño. – Christopher
(sí, me doy cuenta de que esta respuesta es antigua.) ¿Puede explicar cómo funciona este código en prosa, en lugar de tener un par de comentarios que expliquen partes y piezas? –