Linux 上的自定义 ping 有效负载

在 Linux 上,非特权进程无法发送 Raw IP 数据包。 Ping 功能是通过与 ping 实用工具交互实现的。 但是,此实用工具不支持为 Internet 控制消息协议 (ICMP) ping 数据包指定自定义有效负载。 NET 7 添加了对此类情况的检查,如果指定了自定义有效负载,则会引发异常。

旧行为

在以前的版本中,ping 数据包有效负载在非特权 Linux 进程上将以静默方式被忽略(即未发送)。

新行为

从 .NET 7 开始,如果在非特权 Linux 进程中运行时尝试发送自定义 ping 数据包有效负载,则会引发 PlatformNotSupportedException

引入的版本

.NET 7

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

最好向用户发出无法执行的操作的信号,而不是以无提示方式删除有效负载。

如果需要 ping 有效负载,请将应用程序作为 root 运行,或使用 setcap 实用工具授予 cap_net_raw 功能。

否则,请使用不接受自定义有效负载的 Ping.SendPingAsync 重载,或传入一个空数组。

受影响的 API