在同网段内 检测是否IP占用可以用 sendary 来操作,这个我已经实现但是如果我的IP是 192.168.1.* 就没办法检测192.168.0.*网段某个IP是否被占用ping可能被禁用,不能达到百分百检测目的本机是可以捕获windows弹出的对话框,提示你所设置的静态IP网络已有,这个对话框弹出是代表的是你已经设置成功该IP,并造成了冲突。使本机无法连接网络,以后无法sendarp了,重新设置的IP无法再检测是否冲突了。有什么方法可以解决?
解决方案 »
- CStdioFile打开绝对路径名的问题
- 这样的 属性输出窗口 是怎么做的?
- 纯粹散分帖
- vc中怎样让最大化按钮不起做用?请多指导!
- 求仓库最优采购算法!
- 如何用OPENGL读入带有ALPHA通道的纹理?
- FormView中加入CListCtrl的问题
- 究竟使用那种项目类型(win32 Application,win32 Dynamic Link library,还是其他)
- CSplitterWnd 如何在对话框中使用,并且只显示分割线,分割线两侧 还是以显示对话框为背景
- 各位大侠,请推荐一本用vc或c++实现winsock编程的的书!
- 不想用完成端口,求教
- 如何取Oracle中number类型中的浮点数
struct hostent *host;
struct in_addr *ptr; // To retrieve the IP Address
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;
char buf[512];
if ( 0 == strFullName.Left(2).Compare("\\\\"))
strFullName = strFullName.Right(strFullName.GetLength()-2);
gethostname(szHostName, strlen( szHostName ));
host = gethostbyname(strFullName);
if (!host) continue;
ptr = (struct in_addr *) host->h_addr_list[0];
sprintf(buf, "%d.%d.%d.%d", ptr->S_un.S_un_b.s_b1,
ptr->S_un.S_un_b.s_b2, ptr->S_un.S_un_b.s_b3, ptr->S_un.S_un_b.s_b4);
}
}
}
delete Buffer;
WNetCloseEnum(hEnum);
}
WSACleanup();
希望有用
ICMP很多机子为了防止ping攻击,被禁用了,所以此路不通
实际上就是我在更改我IP前,要检测下是否此IP已经被占用了,同网段内255个ip
可以用sendarp确认但是跨网段无法检测,如果强制更改,如果此IP已经被别的机子用了,windows会
弹出个对话框告诉你,这个静态IP已经被占用,但是你拿到这个对话框时,你的IP
已经设置好了,已经在冲突了。现在由什么办法可以异网段检测下此IP是否被在占用。