-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Description
Description
On Linux, non-privileged processes cannot send raw IP packets and Ping functionality is implemented by interfacing with the ping utility. This utility, however, does not support specifying custom payload for the ICMP ping packets so the payload provided by user code was ignored.
PR dotnet/runtime#64625 introduced a check which throws an exception in such cases.
Original issue: dotnet/runtime#62458
Version
.NET 7 Preview 2
Previous behavior
Ping packet payload is silently ignored (i.e. not sent) on non-privileged Linux processes.
New behavior
Attempt to send custom payload when running in non-privileged Linux process leads to PlatformNotSupportedException being thrown.
Type of breaking change
- Binary incompatible: Existing binaries may encounter a breaking change in behavior, such as failure to load/execute or different run-time behavior.
- Source incompatible: Source code may encounter a breaking change in behavior when targeting the new runtime/component/SDK, such as compile errors or different run-time behavior.
Reason for change
It is better to signal to the user that the operation cannot be performed instead of silently dropping the payload.
Recommended action
If ping payload is necessary, run application as root or grant cap_net_raw capability using setcap utility.
Otherwise, use an overload of Ping.SendPingAsync which does not accept the custom payload, or pass in an empty array.
Feature area
Networking
Affected APIs
All overloads of the following methods which accept byte[] buffer parameter
Ping.Send
Ping.SendAsync
Ping.SendPingAsync