一台做网关的机器上如何得到局域网中的每台机器IP列表

pisces007 2005-02-25 04:49:55
目的:得到局域网中的每台机器IP
方法:DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);
问题: 现在得到的是和连接网关的外网的IP,而不是内部的列表
如何能得到内网的IP列表??
...全文
202 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolmei25 2005-03-02
  • 打赏
  • 举报
回复
void CListNeighborDlg::OnOK()
{
GetDlgItem(IDOK)->EnableWindow(FALSE);

CStringArray list;
EnumHosts(list);

CListBox *pList = (CListBox *)GetDlgItem(IDC_LIST);


pList->ResetContent();

for(int i=0; i<list.GetSize(); i++)
{
pList->AddString(list.GetAt(i));
}

GetDlgItem(IDOK)->EnableWindow(TRUE);

// CDialog::OnOK();
}


void CListNeighborDlg::EnumHosts(CStringArray &list)
{
list.RemoveAll();

CString strTemp;
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 = 2048;

LPVOID Buffer = new char[2048];

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("\\\\"))
strFullName = strFullName.Right(strFullName.GetLength() - 2);

gethostname(szHostName, strlen(szHostName));

host = gethostbyname(strFullName);

if (host == NULL) continue;

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

int a = ptr->S_un.S_un_b.s_b1;
int b = ptr->S_un.S_un_b.s_b2;
int c = ptr->S_un.S_un_b.s_b3;
int d = ptr->S_un.S_un_b.s_b4;

strTemp.Format("%s --> %d.%d.%d.%d", strFullName, a,b,c,d);

list.Add(strTemp);

}

}
}

delete Buffer;
WNetCloseEnum(hEnum);
}

WSACleanup();

}
coolmei25 2005-03-02
  • 打赏
  • 举报
回复
http://www.pcvc.net/category/content.asp?sendid=229
coolmei25 2005-03-02
  • 打赏
  • 举报
回复
不知道,看书上说是要调用NetApi32.dll
在网上查把!
pisces007 2005-03-02
  • 打赏
  • 举报
回复
果然好用,
想得到Mac地址用哪一个函数?
多谢!!
月吻长河 2005-03-01
  • 打赏
  • 举报
回复
都是通过广播的方式实现的。把你的网关的整个网段IP地址逐个广播一遍。
pisces007 2005-03-01
  • 打赏
  • 举报
回复
好的,谢谢
coolmei25 2005-03-01
  • 打赏
  • 举报
回复
要是你试不行,我可以帮你做个例子,可我现在没时间,要下午或明天
coolmei25 2005-03-01
  • 打赏
  • 举报
回复
试一下把。一定可以得到的。
pisces007 2005-03-01
  • 打赏
  • 举报
回复
to coolmei25(梅生)
这样能得到局域网中所有机器的ip吗?

coolmei25 2005-03-01
  • 打赏
  • 举报
回复
先用WnetEnumResource 对网络资源进行枚举。
再用Gethostname获得主机名
再用Gethostbyname得到相关数据,可以从中得到IP地址。

用这些东西要先调用WSAStartup函数, 枚举完了用WnetCloseEnum结束,最后调用WSAClearup结束调用Winsock.dll
pisces007 2005-03-01
  • 打赏
  • 举报
回复
晕阿,到底如何ARP广播?
ruby0602 2005-02-28
  • 打赏
  • 举报
回复
ARP广播快点
gzqreder 2005-02-28
  • 打赏
  • 举报
回复
mark,向高人学习
pisces007 2005-02-28
  • 打赏
  • 举报
回复
如何用arp广播???
pisces007 2005-02-26
  • 打赏
  • 举报
回复
to _xiao(小小)
我就是读arp表得出的外网的IP,而不是内网的
to huangxiaoke2000(小小)
如何用arp广播?
huangxiaoke2000 2005-02-26
  • 打赏
  • 举报
回复
arp广播一下
_xiao 2005-02-26
  • 打赏
  • 举报
回复
读arp表
pisces007 2005-02-25
  • 打赏
  • 举报
回复
to orbit(吹泡泡的小猫)
寒!这个太慢了
吹泡泡的小猫 2005-02-25
  • 打赏
  • 举报
回复
有个傻方法,把这个网段的所有ip ping一遍
xuzheng318 2005-02-25
  • 打赏
  • 举报
回复
帮楼主顶!关注!
加载更多回复(1)

18,356

社区成员

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

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