Linux では、特権のないプロセスは生の IP パケットを送信できません。
Ping 機能は、 ping
ユーティリティとやり取りすることによって実装されます。 ただし、このユーティリティでは、インターネット制御メッセージ プロトコル (ICMP) ping パケットのカスタム ペイロードの指定はサポートされていません。 .NET 7 では、このようなケースのチェックが追加され、カスタムペイロードが指定されている場合には、例外をスローします。
以前の動作
以前のバージョンでは、ping パケット ペイロードは、特権のない Linux プロセスでは暗黙的に無視されました (つまり、送信されませんでした)。
新しい動作
.NET 7 以降では、特権のない Linux プロセスで実行されているときに、カスタム ping パケット ペイロードを送信しようとすると、PlatformNotSupportedException がスローされます。
導入されたバージョン
.NET 7
破壊的変更の種類
この変更は 、バイナリの互換性に影響する可能性があります。
変更の理由
ペイロードをサイレント に削除するのではなく、操作を実行できないことをユーザーに通知することをお勧めします。
推奨されるアクション
ping ペイロードが必要な場合は、root
としてアプリケーションを実行するか、cap_net_raw
ユーティリティを使用してsetcap
機能を付与します。
それ以外の場合は、カスタム ペイロードを受け入れない 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[])
.NET