7

可能重复:
为什么 ping 在没有管理员权限的情况下工作?

来自关于 TCP/IP 原始套接字的MSDN文章:

...重要的是要了解某些 SOCK_RAW 类型的套接字可能会收到许多意外的数据报。例如,一个 PING 程序可能会创建一个 SOCK_RAW 类型的套接字来发送 ICMP 回显请求并接收响应......

这段话表明,为了执行 ICMP ping,必须在 Windows 平台上使用原始套接字。但是,同一篇文章也说:

注意: 要使用 SOCK_RAW 类型的套接字需要管理权限。运行使用原始套接字的 Winsock 应用程序的用户必须是本地计算机上管理员组的成员,否则原始套接字调用将失败并返回错误代码 WSAEACCES。在 Windows Vista 和更高版本上,对原始套接字的访问是在创建套接字时强制执行的。在早期版本的 Windows 中,对原始套接字的访问是在其他套接字操作期间强制执行的。

我当然不需要成为ping其他主机的管理员。那么是否ping.exe得到特殊处理,它甚至使用原始套接字还是我还缺少其他东西?

4

1 回答 1

5

正如 Uwe 评论的那样,ping只是不使用原始套接字。它使用特定的 API 来发送称为IcmpSendEchoIcmpSendEcho2的回显请求。

您可以使用Dependency Walkerc:\windows\system32\ping.exe亲自查看。

于 2012-07-11T18:39:22.037 回答