获取IP地址和默认网关的问题

vanssan1 2012-03-30 10:42:27
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获取的网卡链表中的第一个元素是不是主网卡的信息?
...全文
1047 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2012-04-01
  • 打赏
  • 举报
回复
有多个网卡可以通过其中一个上网
vanssan1 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
169... 是DHCP的地址,一般是DHCP没有获取到合法的IP地址而会生成一个默认的地址
[/Quote]

这是他系统本身IP地址错误吗?但这样的话他系统应该不能上网才对吧
oyljerry 2012-03-31
  • 打赏
  • 举报
回复
169... 是DHCP的地址,一般是DHCP没有获取到合法的IP地址而会生成一个默认的地址
tjulz 2012-03-31
  • 打赏
  • 举报
回复
我这边调试了类似的代码,当获取的网卡为虚拟网卡时,你拿到的网关为NULL;如果是虚拟机网卡,网关为255.255.255.255
至于IP地址错误这个,没遇到过。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧