为什么ping不需要Windows上的管理权限?

6 windows ping raw-sockets

可能重复:
为什么ping没有管理员权限?

从有关TCP/IP原始套接字的MSDN文章:

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

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

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

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

kic*_*hik 5

正如Uwe评论的那样,ping只是不使用原始套接字.它使用特定的API发送名为IcmpSendEchoIcmpSendEcho2的 echo请求.

您可以使用的Dependency Walkerc:\windows\system32\ping.exe自己看看吧.

  • 我期待真正的原因是历史; 在基于unix的系统上,ping通常需要用户在一个特殊的组中,或者更典型的是ping程序有一个特殊的位作为该组运行(但内部不允许普通用户生成ping泛洪).Windows继承了早期的Windows版本而没有用户帐户或权限的概念,因此用户可能期望ping应该像以前一样工作. (2认同)