来自关于TCP / IP原始套接字的MSDN文章:
...重要的是要了解一些SOCK_RAW类型的套接字可能会收到许多意外的数据报。例如,PING程序可以创建SOCK_RAW类型的套接字来发送ICMP回应请求并接收响应....
这篇文章建议,为了执行ICMP ping,必须在Windows平台上使用原始套接字。但是,同一篇文章也说:
注意:要使用SOCK_RAW类型的套接字,需要具有管理权限。运行使用原始套接字的Winsock应用程序的用户必须是本地计算机上Administrators组的成员,否则原始套接字调用将失败,错误代码为WSAEACCES。在Windows Vista及更高版本中,在创建套接字时强制访问原始套接字。在早期版本的Windows中,在其他套接字操作期间强制访问原始套接字。
我当然不需要成为ping
其他主机的管理员。 ping.exe
获得特殊待遇,甚至使用原始套接字还是我还缺少其他东西?
答案 0 :(得分:5)
正如Uwe评论的那样,ping
只是不使用原始套接字。它使用特定的API发送名为IcmpSendEcho或IcmpSendEcho2的回应请求。
您可以c:\windows\system32\ping.exe
使用Dependency Walker自行查看。