局域网问题?

Learn-anything 2009-03-05 02:29:13
我想知道某个局域网里面到底有多少机器,
并且知道他们的ip和机名。
有什么好的方法啊?
最好有个源码啦
...全文
128 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dong364 2009-03-06
  • 打赏
  • 举报
回复
// 很早写的一个函数, 希望对你有作用
// 枚举局域网同一网段所有主机IP及主机名线程函数
// 传入参数为窗口对象地址
UINT Scan(LPVOID lParam)
{
CMyDlg *pDlg=(CMyDlg *)lParam;
pDlg->m_listctrl.DeleteAllItems();
CList<CString,CString&> m_list;
m_list.RemoveAll();

CString strTemp;
struct hostent *host;
struct in_addr *ptr; // 获得IP地址

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];
// 调用WSAStartup后调用WNetEnumResource做进一步的枚举工作
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );
NetResource = (NETRESOURCE*)Buffer;

char szHostName[200];
int j=0;
CString strTemp2;

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];

// 提取IP地址信息,地址形式如下: 211.40.35.76
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

strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d);
strTemp2.Format("%d.%d.%d.%d",a,b,c,d);
// 加入到链表中
m_list.AddTail(strTemp);
//添加到CListCtrl控件中
pDlg->m_listctrl.InsertItem(j,strFullName);//插入行
pDlg->m_listctrl.SetItemText(j,1,strTemp2);//设置该行的不同列的显示字符
++j;

}
}
}
delete Buffer;
// 结束枚举工作
WNetCloseEnum( hEnum );
}
return 0;
}
wu447639976 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fanlehai 的回复:]
楼上的可不可以把整个代码发给我参考一下啊?
fanlehai@163.com
谢谢
[/Quote]
发了
路人乙2019 2009-03-06
  • 打赏
  • 举报
回复
NETRESOURCE netRes;
memset(&netRes,0,sizeof(NETRESOURCE));
netRes.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER;
netRes.dwScope = RESOURCE_GLOBALNET;
netRes.dwType = RESOURCETYPE_DISK;
netRes.dwUsage = RESOURCEUSAGE_CONNECTABLE;
netRes.lpComment = NULL;
netRes.lpProvider = NULL;
netRes.lpLocalName = "";
netRes.lpRemoteName = m_Domain.GetBuffer(0);

HANDLE hNet;
DWORD ret = WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,&netRes,&hNet);

if (ret==NO_ERROR)
{
DWORD count = 0xFFFFFFFF;
DWORD buffersize = 1024*8 ;
char * pData = new char[1024*8];
WNetEnumResource(hNet,&count,pData,&buffersize);

NETRESOURCE* pSource = (NETRESOURCE*)pData;
for (int i=0; i<count;i++,pSource++)
{
//去除"//"字符
char* psubstr = pSource->lpRemoteName;
psubstr+=2;
m_Computer.AddString(psubstr);
}
delete pData;
}
WNetCloseEnum(hNet);
m_Computer是CComboBox你可以换成listctrl.
Learn-anything 2009-03-06
  • 打赏
  • 举报
回复
楼上的可不可以把整个代码发给我参考一下啊?
fanlehai@163.com
谢谢
wu447639976 2009-03-06
  • 打赏
  • 举报
回复
我有个是可以显示IP地址、Mac地址、主机名、用户名。
	//初始化视图列表
m_ListView.InsertColumn(0,"MAC地址",LVCFMT_LEFT,120);
m_ListView.InsertColumn(0,"用户\\其它",LVCFMT_LEFT,100);
m_ListView.InsertColumn(0,"主机",LVCFMT_LEFT,80);
m_ListView.InsertColumn(0,"工作组",LVCFMT_LEFT,80);
m_ListView.InsertColumn(0,"IP地址",LVCFMT_LEFT,100);
m_ListView.SetExtendedStyle(LVS_EX_GRIDLINES);
::SendMessage(m_ListView.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);

//初始化端口
if(AfxSocketInit(NULL)==FALSE)
{
AfxMessageBox("Error Init Socket");
}
m_socket.Init(this);
if(m_socket.Create(OWNERPORT,SOCK_DGRAM)==FALSE)
{
AfxMessageBox("Socket Create Error");
}

m_bStop=FALSE;
return TRUE; // return TRUE unless you set the focus to a control
}

opens555 2009-03-06
  • 打赏
  • 举报
回复
mark
Learn-anything 2009-03-06
  • 打赏
  • 举报
回复
up一下
gengzhiwei 2009-03-06
  • 打赏
  • 举报
回复
1、枚举出局域网上所有网络资源
可能所以机器列举不全;

2、ping检测的方式,如果装了防火墙就不通了;


还是采用抓去网络数据包的方式,提取网络ip, 采用winpcap进行编程试试!!!
Learn-anything 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 snowroad 的回复:]
枚举所有的IP地址,用ping并解析返回结果,应该可以的。
[/Quote]

有没有例子给我参考一下
snowroad 2009-03-05
  • 打赏
  • 举报
回复
枚举所有的IP地址,用ping并解析返回结果,应该可以的。
Learn-anything 2009-03-05
  • 打赏
  • 举报
回复
我是想在程序中实现,不是借助于工具
jieleiping 2009-03-05
  • 打赏
  • 举报
回复
端口扫描工具
blackcat242 2009-03-05
  • 打赏
  • 举报
回复
不是有很多扫描的么

18,356

社区成员

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

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