Niestandardowe ładunki ping w systemie Linux
W systemie Linux procesy nieuprzywilejowane nie mogą wysyłać nieprzetworzonych pakietów IP. Ping funkcjonalność jest implementowana przez współdziałanie z narzędziem ping
. Jednak to narzędzie nie obsługuje określania niestandardowego ładunku dla pakietów ping protokołu ICMP (Internet Control Message Protocol). Platforma .NET 7 dodaje sprawdzenie takich przypadków i zgłasza wyjątek, jeśli określono niestandardowy ładunek.
Poprzednie zachowanie
W poprzednich wersjach ładunek pakietu ping był ignorowany w trybie dyskretnym (czyli nie został wysłany) w nieuprzywilejowanych procesach systemu Linux.
Nowe zachowanie
Począwszy od platformy .NET 7, element jest zgłaszany, PlatformNotSupportedException jeśli próbujesz wysłać niestandardowy ładunek pakietu ping podczas uruchamiania w procesie systemu Linux bez uprawnień.
Wprowadzona wersja
.NET 7
Typ zmiany powodującej niezgodność
Ta zmiana może mieć wpływ na zgodność binarną.
Przyczyna wprowadzenia zmiany
Lepiej jest zasygnalizować użytkownikowi, że nie można wykonać operacji zamiast dyskretnie upuszczać ładunku.
Zalecana akcja
Jeśli wymagany jest ładunek ping, uruchom aplikację jako root
, lub przyznaj cap_net_raw
możliwość przy użyciu setcap
narzędzia .
W przeciwnym razie użyj przeciążenia Ping.SendPingAsync , które nie akceptuje niestandardowego ładunku lub przekaże pustą tablicę.
Dotyczy interfejsów 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[])