#include <winsock2.h>
#include <iphlpapi.h>
#include <stdlib.h>
#include <string>
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "IPHLPAPI.lib")
std::string GetMaskFromIp(const std::string &ip)
{
std::string ret;
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof (IP_ADAPTER_INFO));
if (ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(pAdapterInfo, &ulOutBufLen))
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
}
if (NO_ERROR == GetAdaptersInfo(pAdapterInfo, &ulOutBufLen))
{
pAdapter = pAdapterInfo;
while (pAdapter)
{
if (ip == pAdapter->IpAddressList.IpAddress.String)
{
ret = pAdapter->IpAddressList.IpMask.String;
break;
} // 在这里循环可以获取所有网卡信息
pAdapter = pAdapter->Next;
}
}
if (pAdapterInfo)
{
free(pAdapterInfo);
}
return ret;
}
std::string GetLocalIp(SOCKET sock)
{
std::string ret;
sockaddr_in localAddr;
int addrLen = sizeof(localAddr);
if (0 == getsockname(sock, (sockaddr*)&localAddr, &addrLen))
{
ret = inet_ntoa(localAddr.sin_addr);
}
return ret;
}
获取本地IP和子网掩码
最新推荐文章于 2023-04-17 16:41:21 发布