获取IP地址和默认网关的问题
CString GetLocalIP() //获取IP地址
{
char szHostName[128];
CString str;
if( gethostname(szHostName, 128) == 0 )
{
// 结构
struct hostent * pHost;
pHost = gethostbyname(szHostName);
//只取主网卡 ip
BYTE *p;
p =(BYTE *)pHost->h_addr;
str.Format("%d.%d.%d.%d", p[0], p[1],p[2], p[3]);
}
return str;
}
CString GetGateway() //获取网关
{
CString local_gateway;
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
if (pAdapterInfo == NULL)
{
return local_gateway;
}
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
while (pAdapter)
{
if(strcmp(pAdapter->IpAddressList.IpAddress.String,GetLocalIP().GetBuffer(0)) == 0)
{
local_gateway.Format("%s",pAdapter->GatewayList.IpAddress.String);
if( local_gateway == _T("") || local_gateway == _T("0.0.0.0") || local_gateway == _T("255.255.255.255"))
{
local_gateway = pAdapter->DhcpServer.IpAddress.String;
}
return local_gateway;
}
pAdapter = pAdapter->Next;
}
}
if (pAdapterInfo)
free(pAdapterInfo);
}
return local_gateway;
}
我在后台做了个数据统计,在一部分客户机器机上获取的IP地址和默认网关出现问题:
IP地址:169.254.XXX.XXX 网关:255.255.255.255
IP地址:192.168.0.1 网关:255.255.255.255
IP地址:0.1.0.4 网关:NULL
在一部分客户机上出现这三种情况,IP地址为169.254.XXX.XXX这种情况最多,请问下上面三种情况是怎么出现的?是不是由于多个网卡造成的原因?gethostbyname获取的网卡链表中的第一个元素是不是主网卡的信息?