Indy ping需要UAC权限提升吗?

5
Indy ICMP组件需要管理员权限才能进行ping吗?
如果我在UAC开启但没有提升权限的情况下运行,会收到“访问被拒绝”的错误消息。根据这个问题,看起来Indy ICMP使用原始套接字,因此需要提升权限?
我正在使用Delphi 2007&Indy 10.x进行开发,在Windows 7 Pro下进行测试。
1个回答

10

我的同事发现这篇文章指出Indy ICMP组件使用RAW Windows sockets,而在Vista或更高版本中需要提升权限才能在UAC下运行。

我修改了程序以请求UAC权限,现在可以正常ping通。

另一种方法是直接调用ICMPSendEcho()及其相关函数。


2
如果你只是为了ping而提升权限,那么我建议你寻找ping的替代方案——考虑安全性。只有在程序需要执行一些管理任务的情况下,才需要提升权限。ICMP不是这样的任务 :) - iPath ツ
微软绕过自己的安全规则允许其ICMP API(ICMPSendEcho)通过。直接使用RAW套接字总是需要管理员权限,这不是Indys的错。请参见https://dev59.com/HGsz5IYBdhLWcg3wwKmh#7691109。 - mjn
@iPath - 我同意,尽管快速找到原因并修复它(甚至需要UAC提升)比设计、实现和测试低权限解决方案更重要 - 要考虑业务需求 :) - SteB
@mjn - 不是想责怪Indy(这是一套很棒的组件),尽管如果Indy的ICMP直接包装ICMPSendEcho而不使用RAW sockets会更好 :) - SteB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接