sendto失败,非管理员用户的错误代码为10013

时间:2009-10-26 07:08:59

标签: c++ windows sockets

我找到了更多像ping这样的源代码。我唯一的问题是,如果我用非管理用户运行该程序,那么我得到错误代码10013,这意味着:“试图以其访问权限禁止的方式访问套接字。”如果我使用管理员goup成员的用户运行该程序,那么它工作正常。

nResult = sendto (sock, pSendBuffer, sizeof (ICMPheader) + nMessageSize, 0, (SOCKADDR *)&dest, sizeof (SOCKADDR_IN));  
        ::GetSystemTime (&timeSend);  
        ++nPacketsSent;  
        if (nResult == SOCKET_ERROR)  
        {    
        cerr << endl << "An error occured in sendto operation: "  << "WSAGetLastError () = " << WSAGetLastError () << endl;  
                  }  

任何人都可以帮我解决这个问题,或者告诉我为什么非管理员用户不能使用此代码?如果没有,那么我会申请一些代码,我可以使用不属于管理员组成员的用户。

提前致谢!

kampi

3 个答案:

答案 0 :(得分:2)

您的套接字类型为SOCK_RAW吗?在这种情况下,这是设计:

RAW Socket Access Denied to Non-Admin Windows NT 4.0 and Windows 2000 Users

答案 1 :(得分:2)

如果要在Windows上的应用程序中实现ping功能,那么您应该查看IcmpSendEcho2函数,而不是尝试使用原始套接字。

答案 2 :(得分:1)

任何机会,您的代码是否使用原始套接字?如果此代码确实实现了PING请求,那么它应该使用原始套接字。

出于安全方面的考虑(考虑到这些考虑因素的人并不多考虑,但这是另一篇文章),原始套接字仅适用于具有管理员权限的帐户。