Linux でのカスタム ping ペイロード
Linux では、特権のないプロセスが生の IP パケットを送信することはできません。 Ping 機能は、ping
ユーティリティとのやり取りによって実装されます。 ただし、このユーティリティでは、インターネット制御メッセージプロトコル (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[])
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示