PowerPing是一款专业的ICMP ping软件。编程人员必备的ping工具PowerPing。它可以替代所有Windows版本中包含的著名ping程序;主要优点是用户可以在ping中使用相同的功能,以及使用其他软件可能需要的一些其他功能,支持您的工作流自动化,并管理相同的代码位置在所需的位置构建,测试,部署和运行CI / CD从任何ping事件到任何可用的API触发操作,您都可以使用管理员选择的语言来构建自己的操作,也可以使用社区创建的数千个工作流来选择操作和操作;该程序具有自己的ICMP实现,并发送自定义的ICMP / Ping数据包。要发送这些自定义数据包,只需要使用Raw套接字并创建Raw套接字即可;需要它的用户可以下载体验PS:要运行此程序,您将需要以管理员身份运行它,并使用其他命令格式,例如--help而不是-help;。
新的功能:
新的和改进的图形模式(更好的超时显示效果,图形轴的自动缩放,更清晰的条形图)
重做无输入(/ ni或/ noinput)并添加所需的输入(/ ri或/ requireinput)
这些命令的功能仍然与noinput相同。
在命令中使用“命令”将意味着命令完成后不需要输入。
更改之后,这些命令现在将保留在PowerPing中。
因此,如果您一次使用noinput,即使您不包括/ noinput,下次运行PowerPing时也不会提示您输入。
这也适用于/ requireinput,这仍然是PowerPing的默认行为
添加了完整时间戳参数(/ fts或/ fulltimestamp)
与--timestamp相似,但是在/ fulltimestamp和/ timestamp命令中添加了完整的本地时间和日期,并添加了'utc'选项
为了使用/ timestamp utc或/ fulltimestamp utc)在UTC中显示任何时间戳
在--version和`--help``命令中添加了版本检查
为--symbols命令添加了替代主题(使用/ sym 0或1选择替代主题)
在--listen命令中添加了侦听特定地址的选项(使用/ listen 127.0.0.1指定地址)
如果未指定地址,默认情况下/ listen命令现在将侦听所有本地适配器地址
向原始套接字创建错误消息添加了更多信息
改进了地址查找和参数解析,改进了构建和测试过程
软件特色:
该程序为用户提供了基本的ping功能
支持颜色输出,程序使用几种颜色
提供显示选项,自定义检索的信息)
ICMP数据包定制,支持扫描
泛洪,向该地址发送大量ping命令
ICMP数据包捕获(/监视器)
支持IP位置查询,Whois查询,绘图
使用说明:
可以在ICMP.cs中找到此ICMP实现。在运行时,我们打开一个原始套接字,并通过该套接字以字节为单位发送ICMP数据包。
原始套接字使我们能够发送具有必需的ICMP或IP属性的自定义Ping数据包。
为什么原始套接字需要管理权限
在Windows上,由于Windows XP中的安全问题,Microsoft限制了对Raw套接字的访问,此后,要求用户具有创建它们的管理权限:
原始套接字提供了操作基本传输的功能,因此它们可用于构成安全威胁的恶意目的。因此,只有Administrators组的成员才能在Windows 2000及更高版本上创建SOCK_RAW类型的套接字。 (来自Microsoft Docs)
为什么不使用TCP或UDP
ICMP是OSI模型的网络层中存在的协议,它不设计为与诸如TCP和UDP(在上层)的传输层协议一起使用。相反,它被设计为用作其自己的协议并在IP数据包内传输。
尽管可以在没有管理权限的情况下创建TCP和UDP套接字,但实际情况并非如此,它们不能也不能用于传输ICMP数据包(有关更多信息,请参见下文)。
为什么不在.NET中使用Ping类
.NET 4.8和.NET Core中的Ping类都使用iphlpapi.dll发送ICMP数据包。它们为库提供了安全的包装,并且不需要管理权限即可发送ping。
不幸的是,实际的界面不能真正满足我们的需求,不能满足我们想要的定制级别。我们无法执行以下操作:
更改并读取ICMP类型
更改并读取ICMP消息字段的内容
读取并处理数据包的校验和
人为地增加ICMP消息的大小
自定义超时
更改IP数据包的配置(例如TTL和“请勿分段”标头)
交易时
鉴于iphlpapi.dll库周围的所有封送和安全措施,快速发送大量ICMP数据包(如我们处于“泛洪”模式)的性能开销非常严重。
可能的解决方案
我认为某些ping工具使用UDP发送ping数据包,我们可以尝试实现类似的方法,但是我尚未对这项工作的可能性进行过多研究。
我们可以使用iphlpapi.dll库(例如.NET Core和.NET Framework)来发送ICMP数据包,而不是RawSockets。 我们可以抽象套接字实现,以允许我们使用RawSockets或本机库发送代码(此选项似乎可行,尽管需要大量工作)
我希望这可以帮助您理解PowerPing为什么需要管理员权限。 我知道这有点不方便,但是就目前而言,原始套接字(和管理权限)使我们能够从最早的版本获得PowerPing的功能,可定制性和性能。