2009-10-26 26 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

相關問題