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
- System.Net.NetworkInformation.Ping.Send(IPAddress, Int32, Byte[], PingOptions)
- System.Net.NetworkInformation.Ping.Send(IPAddress, Int32, Byte[])
- System.Net.NetworkInformation.Ping.Send(String, Int32, Byte[], PingOptions)
- System.Net.NetworkInformation.Ping.Send(String, Int32, Byte[])
- System.Net.NetworkInformation.Ping.SendAsync(IPAddress, Int32, Byte[], PingOptions, Object)
- System.Net.NetworkInformation.Ping.SendAsync(IPAddress, Int32, Byte[], Object)
- System.Net.NetworkInformation.Ping.SendAsync(String, Int32, Byte[], PingOptions, Object)
- System.Net.NetworkInformation.Ping.SendAsync(String, Int32, Byte[], Object)
- System.Net.NetworkInformation.Ping.SendPingAsync(IPAddress, Int32, Byte[], PingOptions)
- System.Net.NetworkInformation.Ping.SendPingAsync(IPAddress, Int32, Byte[])
- System.Net.NetworkInformation.Ping.SendPingAsync(String, Int32, Byte[], PingOptions)
- System.Net.NetworkInformation.Ping.SendPingAsync(String, Int32, Byte[])
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈