我想问一个关于ioctlsocket的问题,求高手助我一力

john_1990 新潮网络科技 程序员  2012-08-12 03:44:50
本人在使用原始的套字来开始一个网络嗅探器时,利用了msdn描述的ioctlsocket来设置SIO_RCVALL达到混合模式,但系它的错误码居然是10045,那意思是参考的对象类型不支持尝试的操作。(PS:我是用管理员身份运行的了啦,开发环境是vc6.0,还有就是我的系统是win7)
...全文
129 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Geoff08Zhang 2012-09-26
你可以看一下《WinSock网络编程经络》第20章套接口选项,内容摘录如下:
========================
WinSock中的ioctlsocket是Berkeley套接口功能的子集,只适用于套接口,很多命令也不支持,如:SIOCSPGRP、FIOASYNC等。WinSock中,函数ioctlsocket只支持三个命令:FIONBIO、FIONREAD、SIOCATMARK。
========================

你的命令SIO_RCVALL不被支持,所以返回WSAEOPNOTSUPP.
回复
vkjsimde 2012-09-26
http://stackoverflow.com/questions/6108715/capturing-packets-on-windows-7
参考下这里,有的人能在win7下运行,但好像的又不行
回复
danscort2000 2012-08-13
尝试把WIN7里的IP V6支持关闭掉,并直接关闭UAC
如果你用的是64位WIN7,使用64位原生代码再尝试
回复
Gloveing 2012-08-12
ERROR CODE:
10045 The attempted operation is not supported for the type of object referenced. WSAEOPNOTSUPP
以下仅供参考:
//	Result = WSAIoctl(SnifferSocket, SIO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen), 
// &dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);
Result =ioctlsocket(SnifferSocket, SIO_RCVALL, &dwBufferInLen);

if (Result == SOCKET_ERROR)
{
printf("WSAIoctl failed with error %d\n", WSAGetLastError());
closesocket(SnifferSocket);
return 0;
}

回复
发动态
发帖子
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
社区公告
暂无公告