> А как с пингами решили?Добавили поддержку ограниченных ICMP сокетов в ядро. В upstream, как я помню, начиная с Linux 3.0: https://lwn.net/Articles/420799/ Теперь живет там своей жизнью: https://cregit.linuxsources.org/code/5.10/net/ipv4/ping.c.html
К сожалению, с этим вышло нехорошо. Исходно у нас для ping заменялся SUID root на SGID _icmp, что делало новый код в ядре доступным только этой группе, то есть мы добавляли дополнительный уровень безопасности. Нам удалось отстоять сохранение ограничения наших ICMP сокетов по диапазону групп (настраивается через sysctl) и их недоступность не-root'у по умолчанию при включении в upstream (исходно нас просили эту защиту выкинуть). Но (как минимум) в Android этот sysctl выставили так, что новая функциональность стала доступна всем. (Наверное, у них были на то свои основания.) А при переносе кода с интерфейсов ядра 2.4.32 (под который эти сокеты исходно реализовал участник нашей команды) на 2.6+ (другим участником нашей команды, то есть наша ответственность), к сожалению, были привнесены ошибки. Конечно, теперь известные ошибки исправлены. Вот конец треда на эту тему, с целью учиться на ошибках: https://www.openwall.com/lists/oss-security/2017/03/25/1
Теперь кроме нашего патченного ping'а, насколько я знаю эти сокеты также использует QEMU (чтобы можно было ping'ать из VM не запуская сам QEMU под root) и, видимо, приложения под Android.
Кстати, traceroute (его классический "протокол") реализуем без root'а уже начиная с Linux 2.4, и с тех же времен есть реализация от Olaf Kirch, это умеющая, которой мы и пользуемся. А другие дистрибутивы что-то не спешат.