怎样才能把整个网络已经使用的主机ip记录下来?
谢谢. 问题点数:20、回复次数:5Top
1 楼yuanbocsut(井冈星火)回复于 2006-03-04 15:32:28 得分 0
不懂!Top
2 楼bluewindyy(班班)回复于 2006-03-04 17:07:50 得分 0
你是指枚举当前局域网的IP吗
一般可以向每个IP发arp请求包 有返回的就算存活
不过可能有些防火墙会过滤Ping命令
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=197104
Top
3 楼mzjn(初学者)回复于 2006-03-04 19:33:48 得分 0
不知道为什么,下边的代码连接出错.我用的是VC6.0
#include <afxdisp.h>
#include <winsock2.h>
#include<vector>
using namespace std;
void main()
{
DWORD dwScope=RESOURCE_CONTEXT;
HANDLE hEnum;
WNetOpenEnum(dwScope,NULL,NULL,NULL,&hEnum);
if(hEnum)
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 2048;
LPVOID Buffer = new char[2048];
WNetEnumResource(hEnum,&Count,Buffer,&BufferSize);
NETRESOURCE *NetResource=NULL;
NetResource = (NETRESOURCE*)Buffer;
char szHostName[255];
unsigned int i;
CString strTemp;
vector<CString> m_List;
for(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));
struct hostent FAR* host = gethostbyname(strFullName);
if(host== NULL) continue;
strTemp.Format("%s",strFullName);
m_List.push_back(strTemp);// 获得地址添加到列表
}//if
}//if
}//for
delete Buffer;
}//if
WNetCloseEnum( hEnum );
}Top
4 楼mzjn(初学者)回复于 2006-03-04 19:36:41 得分 0
下边这个也是一样的:
错误如下:
Linking...
请问如何快速枚举局域网内所有存活主机IP.OBJ : error LNK2001: unresolved external symbol _WNetCloseEnum@4
请问如何快速枚举局域网内所有存活主机IP.OBJ : error LNK2001: unresolved external symbol _WNetEnumResourceA@16
请问如何快速枚举局域网内所有存活主机IP.OBJ : error LNK2001: unresolved external symbol _WNetOpenEnumA@20
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/请问如何快速枚举局域网内所有存活主机IP.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.
代码如下:
#include <afxdisp.h>
#include <winsock2.h>
int main()
{
CString strTemp;
//struct hostent *host;
struct hostent FAR * 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];
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!=NULL )
{
CString strFullName = NetResource->lpRemoteName;
//LPTSTR strFullName1=NetResource->lpRemoteName;
//CString strFullName;
//strFullName.Format("%s",strFullName1);
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];
// 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);
//AfxMessageBox(strTemp);//获得一个就弹出一个
printf("%s",strTemp);
}//if
}//if
}//for
delete Buffer;
WNetCloseEnum( hEnum );
}
WSACleanup();
return 1;
}
Top
5 楼mzjn(初学者)回复于 2006-03-04 20:05:17 得分 0
挺急的,那位高手可以帮帮忙.Top




