我找到了更多像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
答案 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请求,那么它应该使用原始套接字。
出于安全方面的考虑(考虑到这些考虑因素的人并不多考虑,但这是另一篇文章),原始套接字仅适用于具有管理员权限的帐户。