2009-10-26 28 views
0

我发现了更多的源代码,它们像ping一样工作。我唯一的问题是,如果我用非管理用户运行该程序,那么我会返回错误代码10013,这意味着:“试图以禁止其访问权限的方式访问套接字”。如果我与管理员团队成员的用户运行该程序,那么它工作正常。sendto失败,发现错误代码为10013的非管理员用户

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; 
        } 

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

在此先感谢!

kampi

回答

2

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

+0

你是对的!这会容易得多,但我需要icmplib.lib来编译ICMPSendEcho2程序,但是我找不到icmplib.lib。你知道我在哪里可以得到它吗?感谢提前! – kampi 2009-10-26 18:42:41

+0

你的意思是iphlpapi.lib?这应该包含在你的编译器中(它当然是用Visual Stdio 2008)。或者,您可以下载Windows SDK(请参阅http://msdn.microsoft.com/en-us/windows/bb980924.aspx) – cmeerw 2009-10-26 18:54:00

+0

不,我的意思是icmplib.lib。但它是我的错误:)我ususally使用未识别ICMPSendEcho2的Dev-C++,因为它需要icmplib.lib,但我找不到它,所以我用Visual Studio编译,而这一个不需要icmplib.lib。我的错误,对不起:) – kampi 2009-10-26 19:31:49

1

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

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

+0

换句话说,只有在管理员的时候才可以发出“ping”命令?似乎世界有点不同 – Rom 2009-10-26 07:44:30

+0

@Rom:在Linux下,ping由root拥有,setuid位已设置,因此RAW套接字可以适用于任何人。在Windows下,它取决于您的Windows和ServicePack版本。我认为Windows使用类似的方法来使其工作... – Malkocoglu 2009-10-26 07:57:47

+0

@Malkocoglu:没有Windows版本/服务包,您需要成为管理员才能运行'ping'命令。在Windows中没有相应的“setuid”标志,因为Windows上的安全性是在用户级别上实现的(程序拥有用户权限)。请注意,该问题有“windows”标签 – Rom 2009-10-26 08:06:44

相关问题