您好!我想问一下怎么在C++中获取局域网中的所有IP列表..谢谢 10

 我来答
305508676
2011-07-28 · TA获得超过648个赞
知道小有建树答主
回答量:627
采纳率:50%
帮助的人:599万
展开全部
void CNTestDlg::GetNameAndIp(CStringArray& NameArray,CStringArray& IpArray)
{
NameArray.RemoveAll();
IpArray.RemoveAll();

struct hostent *host;
struct in_addr *ptr;

DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum );

WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);

if(hEnum)
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 10240;
LPVOID Buffer = new char[10240];
WNetEnumResource(hEnum, &Count,Buffer, &BufferSize);
NetResource = (NETRESOURCE*)Buffer;

char szHostName[200];

for( unsigned int i = 0;i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++)
{
if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY )
{
if (NetResource->lpRemoteName)
{
CString strFullName = NetResource->lpRemoteName;
if ( 0 == strFullName.Left(2).Compare(_T("\\\\")) )
strFullName = strFullName.Right(strFullName.GetLength()-2);

gethostname(szHostName,strlen(szHostName));
USES_CONVERSION;
char *pchar = T2A(strFullName);
host = gethostbyname(pchar);

if(host == NULL) continue;
ptr = (struct in_addr *) host->h_addr_list[0];

int a = ptr->S_un.S_un_b.s_b1; // 211
int b = ptr->S_un.S_un_b.s_b2; // 40
int c = ptr->S_un.S_un_b.s_b3; // 35
int d = ptr->S_un.S_un_b.s_b4; // 76
CString strTemp;
strTemp.Format(_T("%d.%d.%d.%d"),a,b,c,d);
NameArray.Add(strFullName);
m_IpArray.Add(strTemp);
}
}
}
delete Buffer;
WNetCloseEnum( hEnum );
}
WSACleanup();
}

http://zhidao.baidu.com/question/58267072.html
追问
怎么调用呀。。我刚学C++。所以不好意思。能给我详细点的代码......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式