GPT答: |
7i24.cn
|
可以使用 Windows API 来获取网络接口的 IP 地址。比如,可以使用GetAdaptersInfo方法来获取 IP 地址。
下面的代码示例演示如何使用 GetAdaptersInfo 方法来获取 Windows 网络接口的 IP 地址:
// System Headers
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <iphlpapi.h>
//lib
#pragma comment(lib, "IPHLPAPI.lib")
// prototype
int GetNetworkAdaptersIP();
// main
int main()
{
int iResult;
iResult = GetNetworkAdaptersIP();
printf("GetNetworkAdaptersIP returned : %d \n", iResult);
return 0;
}
int GetNetworkAdaptersIP()
{
// buffer
PIP_ADAPTER_ADDRESSES pAdapterAddresses = NULL;
ULONG ulOutBufLen = 0;
// getting required buffer size
DWORD dwRetVal = 0;
dwRetVal = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAdapterAddresses, &ulOutBufLen);
if (dwRetVal == ERROR_BUFFER_OVERFLOW)
{
// allocation buffer
pAdapterAddresses = (IP_ADAPTER_ADDRESSES *)malloc(ulOutBufLen);
// getting adapter IPs
dwRetVal = GetAdaptersAddresses(AF_UNSPEC,GAA_FLAG_INCLUDE_PREFIX, NULL, pAdapterAddresses, &ulOutBufLen);
if (dwRetVal == NO_ERROR)
{
PIP_ADAPTER_ADDRESSES pCurrentAddress = pAdapterAddress;
while (pCurrentAddress)
{
PIP_ADAPTER_UNICAST_ADDRESS pUnicastAddress = pCurrentAddress->FirstUnicastAddress;
if (pUnicastAddress)
{
SOCKET_ADDRESS SocketAddress = pUnicastAddress->Address;
struct sockaddr_in *sin = (struct sockaddr_in*)SocketAddress.lpSockaddr;
char* ip = inet_ntoa(sin->sin_addr);
printf("IP Address: %s\n", ip);
}
pCurrentAddress = pCurrentAddress->Next;
}
}
else
{
// error handling
printf("GetAdaptersAddresses failed with error: %d\n", dwRetVal);
if (pAdapterAddresses)
free(pAdapterAddresses);
return 1;
}
// freeing buffer
if (pAdapterAddresses)
free(pAdapterAddresses);
return 0;
}
else
{
// error handling
printf("GetAdaptersAddresses failed with error: %d\n", dwRetVal);
if (pAdapterAddresses)
free(pAdapterAddresses);
return 1;
}
}
|