#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <vector>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")
void listarIPs() {
ULONG ulOutBufLen = sizeof(IP_ADAPTER_ADDRESSES);
PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(ulOutBufLen);
ULONG ulFlags = GAA_FLAG_INCLUDE_PREFIX;
ULONG ulFamily = AF_UNSPEC; // IPv4 y IPv6
ULONG ulRetVal = GetAdaptersAddresses(ulFamily, ulFlags, NULL, pAddresses, &ulOutBufLen);
if (ulRetVal == ERROR_BUFFER_OVERFLOW) {
free(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(ulOutBufLen);
ulRetVal = GetAdaptersAddresses(ulFamily, ulFlags, NULL, pAddresses, &ulOutBufLen);
}
if (ulRetVal == NO_ERROR) {
for (PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses; pCurrAddresses != NULL; pCurrAddresses = pCurrAddresses->Next) {
for (PIP_ADAPTER_UNICAST_ADDRESS pUnicast = pCurrAddresses->FirstUnicastAddress; pUnicast != NULL; pUnicast = pUnicast->Next) {
char ipString[INET6_ADDRSTRLEN];
getnameinfo(pUnicast->Address.lpSockaddr, pUnicast->Address.iSockaddrLength, ipString, sizeof(ipString), NULL, 0, NI_NUMERICHOST);
std::cout << "IP: " << ipString << " - Nombre: " << pCurrAddresses->AdapterName << std::endl;
}
}
}
free(pAddresses);
}
int main() {
listarIPs();
return 0;
}