{"id":500224,"date":"2026-10-25T23:16:15","date_gmt":"2026-10-25T20:16:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500224"},"modified":"2026-10-25T23:16:15","modified_gmt":"2026-10-25T20:16:15","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500224","title":{"rendered":"Ping, traceroute \u0438 Path MTU \u043d\u0430 Android \u0431\u0435\u0437 root \u0438 NDK"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u0430\u0434\u0438\u043b\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0451 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Android, \u044f \u0431\u044b\u043b \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e ping, traceroute \u0438 Path MTU \u0442\u0430\u043c \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. ICMP \u2014 \u044d\u0442\u043e raw-\u0441\u043e\u043a\u0435\u0442, raw-\u0441\u043e\u043a\u0435\u0442 \u2014 \u044d\u0442\u043e root, \u0430 \u0431\u0435\u0437 root \u044f \u0432\u0438\u0434\u0435\u043b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u0434\u0451\u0440\u0433\u0430\u0442\u044c <code>\/system\/bin\/ping<\/code> \u0438\u043b\u0438 \u043c\u0435\u0440\u0438\u0442\u044c TCP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0438\u043d\u0433\u043e\u043c. \u042f \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0430 TCP-\u043f\u043e\u0440\u0442\u044b \u2014 \u0438 \u0442\u0443\u0442 \u0437\u0430\u0434\u0430\u043b \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0443 ICMP \u043d\u0435\u0442 \u043f\u043e\u0440\u0442\u043e\u0432, \u0442\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u044e \u043f\u0438\u043d\u0433 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0438\u0445? \u041e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:<\/p>\n<pre><code>$ adb shell cat \/proc\/sys\/net\/ipv4\/ping_group_range02147483647<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u0438 \u043f\u043b\u0430\u043d \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0430 \u0432\u0441\u0435\u0445 Android-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u0433\u0434\u0435 \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ICMP-\u0441\u043e\u043a\u0435\u0442. \u0411\u0435\u0437 root \u0438 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043d\u0430 C.<\/p>\n<p>\u042d\u0442\u043e \u043f\u044f\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e NetDiag+ \u2014 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0438\u0448\u0443 \u043e\u0434\u0438\u043d. \u041f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e iOS: <a href=\"https:\/\/habr.com\/ru\/articles\/1038188\/\" rel=\"noopener nofollow\">ping \u0438 traceroute \u0431\u0435\u0437 entitlements<\/a>, <a href=\"https:\/\/habr.com\/ru\/articles\/1043484\/\" rel=\"noopener nofollow\">MTR \u0438 Path MTU<\/a>, <a href=\"https:\/\/habr.com\/ru\/articles\/1085252\/\" rel=\"noopener nofollow\">\u0437\u0430\u043c\u0435\u0440 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0435\u0437 root<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1088228\/\" rel=\"noopener nofollow\">\u0442\u0438\u0445\u0438\u0439 403 \u043e\u0442 Cloudflare \u0432 \u0442\u0435\u0441\u0442\u0435 bufferbloat<\/a>. \u041d\u0438\u0436\u0435 \u2014 \u043a\u0430\u043a \u043d\u0430 Android \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b ping, traceroute, MTR \u0438 Path MTU \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Kotlin \u0438 \u0433\u0434\u0435 \u0432\u0441\u0451 \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>Ping-\u0441\u043e\u043a\u0435\u0442\u044b: ICMP \u0431\u0435\u0437 raw-\u0441\u043e\u043a\u0435\u0442\u0430<\/h3>\n<p>\u0412 Linux \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0435\u0441\u0442\u044c \u00abping-\u0441\u043e\u043a\u0435\u0442\u044b\u00bb: <code>socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)<\/code>. \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0448\u044c ICMP echo request \u043a\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u2014 \u044f\u0434\u0440\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 echo reply. \u041a\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u0435\u0442, \u0440\u0435\u0448\u0430\u0435\u0442 sysctl <code>net.ipv4.ping_group_range<\/code>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u044f\u0434\u0440\u0435 \u043e\u043d \u0437\u0430\u043a\u0440\u044b\u0442 (<code>1 0<\/code>), \u0430 \u043d\u0430 Android-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u0440\u0443\u043f\u043f. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Android \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438\u043c UID, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 NDK, \u0445\u0432\u0430\u0442\u0430\u0435\u0442 <code>android.system.Os<\/code>:<\/p>\n<pre><code class=\"kotlin\">val fd = Os.socket(OsConstants.AF_INET, OsConstants.SOCK_DGRAM, OsConstants.IPPROTO_ICMP)Os.setsockoptTimeval(fd, OsConstants.SOL_SOCKET, OsConstants.SO_RCVTIMEO,                     StructTimeval.fromMillis(timeoutMs))Os.sendto(fd, packet, 0, packet.size, 0, address, 0)val n = Os.recvfrom(fd, buf, 0, buf.size, 0, null)   \/\/ \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 ErrnoException(EAGAIN)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0430\u043a\u0435\u0442 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 8-\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a ICMP \u043f\u043b\u044e\u0441 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0442 raw-\u0441\u043e\u043a\u0435\u0442\u0430 \u0434\u0432\u0430 \u043e\u0442\u043b\u0438\u0447\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u044f\u0434\u0440\u043e.<\/strong> \u0423 ping-\u0441\u043e\u043a\u0435\u0442\u0430 \u0441\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u0430\u043a \u0443 UDP-\u0441\u043e\u043a\u0435\u0442\u0430 \u0441\u0432\u043e\u0439 \u043f\u043e\u0440\u0442, \u0438 \u044f\u0434\u0440\u043e \u0441\u0430\u043c\u043e \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0435 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u0430 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u0432\u0435\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u044f\u0434\u0440\u043e.<\/strong> \u0421\u043e\u043a\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e echo reply \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c. \u0414\u0432\u0430 \u043f\u0438\u043d\u0433\u0430, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0447\u0443\u0436\u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u0432\u0438\u0434\u044f\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u0437\u0434\u0435\u0441\u044c Android \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 iOS. \u041d\u0430 iPhone \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 <code>SOCK_DGRAM<\/code>-\u0441\u043e\u043a\u0435\u0442, \u043d\u043e Darwin \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b echo reply \u0438 \u0434\u0440\u0443\u0433\u0438\u043c ICMP-\u0441\u043e\u043a\u0435\u0442\u0430\u043c \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u043e\u0433\u0434\u0430 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0438\u043d\u0433\u0435\u0440, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0438\u043d\u0433\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 0 \u043c\u0441, \u043f\u043e\u043a\u0430 \u044f \u043d\u0435 \u043d\u0430\u0447\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0441\u0430\u043c, \u2014 \u043e\u0431 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 <a href=\"https:\/\/habr.com\/ru\/articles\/1085252\/\" rel=\"noopener nofollow\">\u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439<\/a>. \u041d\u0430 Android \u044d\u0442\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0434\u0435\u043b\u0430\u0435\u0442 \u044f\u0434\u0440\u043e.<\/p>\n<p>\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c \u044f \u0437\u0430\u0434\u0430\u044e \u0447\u0435\u0440\u0435\u0437 <code>setsockoptTimeval<\/code>, \u0430 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 API 29 \u2014 \u043e\u0442\u0441\u044e\u0434\u0430 <code>minSdk 29<\/code>. \u0411\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430. \u041d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0442\u0443 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>Os.poll<\/code> \u043f\u0435\u0440\u0435\u0434 <code>recvfrom<\/code>, \u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0438\u0436\u0435 29 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c.<\/p>\n<h3>Traceroute: \u0445\u043e\u043f\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0448\u0438\u0431\u043e\u043a<\/h3>\n<p>Traceroute \u0448\u043b\u0451\u0442 echo request \u0441 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c TTL. \u0420\u043e\u0443\u0442\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f TTL, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 ICMP Time Exceeded. \u0421 raw-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u044d\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0448\u044c. \u0421 ping-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u2014 \u043d\u0435\u0442: Linux \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 <em>\u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438<\/em> \u0441\u043e\u043a\u0435\u0442\u0430, \u0438 \u0441\u0430\u043c \u043f\u0430\u043a\u0435\u0442 <code>recvfrom()<\/code> \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0445 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c <code>IP_RECVERR<\/code> \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0447\u0435\u0440\u0435\u0437 <code>recvmsg(MSG_ERRQUEUE)<\/code>. \u041a\u0430\u0436\u0434\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 control-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <code>sock_extended_err<\/code>, \u0430 \u0437\u0430 \u043d\u0435\u0439 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0438\u043b.<\/p>\n<p>\u0412 <code>android.system.Os<\/code> \u0435\u0441\u0442\u044c <code>recvmsg<\/code>, <code>StructMsghdr<\/code> \u0438 <code>StructCmsghdr<\/code> (API 31), \u043d\u043e \u043d\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442: <code>IP_RECVERR<\/code> \u0438 <code>MSG_ERRQUEUE<\/code> \u0432 <code>OsConstants<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u044e \u0441\u044b\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f Linux:<\/p>\n<pre><code class=\"kotlin\">const val IP_RECVERR = 11const val MSG_ERRQUEUE = 0x2000Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, IP_RECVERR, 1)Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, OsConstants.IP_TTL, ttl)\/\/ \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0435\u0441\u043b\u0438 echo reply \u043d\u0435 \u043f\u0440\u0438\u0448\u0451\u043b:val iov = arrayOf(ByteBuffer.allocate(1500))val control = arrayOf(StructCmsghdr(OsConstants.IPPROTO_IP, IP_RECVERR, ByteArray(512)))val msg = StructMsghdr(null, iov, control, 0)Os.recvmsg(fd, msg, MSG_ERRQUEUE)   \/\/ EAGAIN, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430for (cmsg in msg.msg_control ?: emptyArray()) {    if (cmsg.cmsg_level != OsConstants.IPPROTO_IP || cmsg.cmsg_type != IP_RECVERR) continue    val d = cmsg.cmsg_data ?: continue    if (d.size &lt; 24) continue    if ((d[4].toInt() and 0xFF) != 2) continue          \/\/ ee_origin == SO_EE_ORIGIN_ICMP    val type = d[5].toInt() and 0xFF                     \/\/ ee_type: 11 Time Exceeded, 3 Unreachable    if (type != 11 &amp;&amp; type != 3) continue    val hop = (0 until 4).joinToString(\".\") { (d[20 + it].toInt() and 0xFF).toString() }    \/\/ hop \u2014 \u0440\u043e\u0443\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0438\u043b}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u2014 \u0438\u0437 <code>sock_extended_err<\/code>: origin \u0432 \u0431\u0430\u0439\u0442\u0435 4, \u0442\u0438\u043f ICMP \u0432 \u0431\u0430\u0439\u0442\u0435 5, \u0441 16-\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0434\u0451\u0442 <code>sockaddr_in<\/code> \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e IPv4-\u0430\u0434\u0440\u0435\u0441 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 20\u201323. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <code>cmsg_level<\/code> \u0438 <code>ee_origin<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043d\u043e\u0439\u044f, \u043d\u043e \u0431\u0435\u0437 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 control-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c \u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439, \u043d\u043e \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u0445\u043e\u043f.<\/p>\n<p>\u0421\u0430\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0435 \u0448\u043b\u0451\u0442, \u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c echo reply \u2014 \u043f\u043e \u043d\u0435\u043c\u0443 \u0446\u0438\u043a\u043b \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0448\u0451\u043b. MTR \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0446\u0438\u043a\u043b, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u043e \u043a\u0440\u0443\u0433\u0443, \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0445\u043e\u043f\u0443.<\/p>\n<h3>Path MTU: \u0431\u0438\u0442 DF \u0431\u0435\u0437 raw-\u0441\u043e\u043a\u0435\u0442\u0430<\/h3>\n<p>Path MTU \u2014 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0431\u0435\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. VPN, PPPoE \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 1500. \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043d\u0435 \u0431\u0435\u0434\u0430, \u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e \u043f\u0443\u0442\u0438 \u0440\u0435\u0436\u0443\u0442 ICMP Fragmentation Needed, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430: \u043e\u0434\u043d\u0438 \u0441\u0430\u0439\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0441\u044f\u0442.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u2014 echo request \u0441 \u0431\u0438\u0442\u043e\u043c don\u2019t fragment \u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443. Ping-\u0441\u043e\u043a\u0435\u0442 \u0443\u043c\u0435\u0435\u0442 \u0438 \u044d\u0442\u043e:<\/p>\n<pre><code class=\"kotlin\">const val IP_MTU_DISCOVER = 10const val IP_PMTUDISC_DO = 2Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 <code>IP_PMTUDISC_DO<\/code> \u044f\u0434\u0440\u043e \u0441\u0442\u0430\u0432\u0438\u0442 DF \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0435\u043c\u0443 MTU: <code>sendto()<\/code> \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>EMSGSIZE<\/code>. \u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442\u0432\u0435\u0442 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442; \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u2014 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e IP-\u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 ICMP \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0438\u043d\u0443\u0441 28 \u0431\u0430\u0439\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432. \u041f\u043e\u0438\u0441\u043a \u0438\u0434\u0451\u0442 \u043e\u0442 552 \u0434\u043e 1500 \u0431\u0430\u0439\u0442, \u044d\u0442\u043e \u043e\u043a\u043e\u043b\u043e \u0434\u0435\u0441\u044f\u0442\u0438 \u043f\u0440\u043e\u0431.<\/p>\n<p>\u041e\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0432\u044b\u0448\u043b\u043e: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 \u044f\u0434\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 <code>getsockopt(IP_MTU)<\/code> \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043a\u0438. \u0412 <code>android.system.Os<\/code> \u0435\u0441\u0442\u044c <code>setsockoptInt<\/code>, \u043d\u043e \u043d\u0435\u0442 <code>getsockoptInt<\/code> \u2014 \u0442\u043e\u043b\u044c\u043a\u043e <code>getsockoptTimeval<\/code>. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 NDK-\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u0434\u0430\u043b\u0430 \u0431\u044b. \u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0431\u0435\u0437 \u043d\u0435\u0451.<\/p>\n<h3>\u041d\u0430 \u0447\u0451\u043c \u044f \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0441\u044f<\/h3>\n<p><strong>1. \u041c\u043e\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043f\u0438\u043d\u0433\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442.<\/strong> \u0412 \u043c\u043e\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0430 TCP \u0438 UDP, \u043d\u043e \u043d\u0435 ICMP \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c: \u0434\u0430\u0436\u0435 <code>ping 1.1.1.1<\/code> \u0438\u0437 <code>adb shell<\/code> \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u043e\u043b\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b. \u0412\u0441\u0435 ICMP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u043b\u043e\u043c\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043e\u043c, \u0430 \u0432\u0441\u0435 TCP-\u0448\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u2014 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0442\u043e\u0447\u044c-\u0432-\u0442\u043e\u0447\u044c \u043a\u0430\u043a \u0431\u0430\u0433 \u0432 \u043c\u043e\u0451\u043c \u043a\u043e\u0434\u0435. \u041f\u0438\u043d\u0433 \u0434\u043e <code>10.0.2.2<\/code> (\u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u044d\u0442\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0445\u043e\u0441\u0442-\u043c\u0430\u0448\u0438\u043d\u044b) \u0434\u0430\u043b 0% \u043f\u043e\u0442\u0435\u0440\u044c: \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043e\u043a\u0435\u0442 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. ICMP \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435.<\/p>\n<p><strong>2. \u0417\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 API, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442.<\/strong> \u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <code>Os.recvmsg<\/code>, <code>StructMsghdr<\/code> \u0438 <code>StructCmsghdr<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 API 31. \u041d\u043e \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 Firebase Test Lab \u0441 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u043c API traceroute \u0443\u043f\u0430\u043b \u0441 <code>NoClassDefFoundError<\/code>: \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>Class.forName<\/code> \u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u044e \u043e\u0442\u0432\u0435\u0442. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e <code>NoClassDefFoundError<\/code> \u2014 \u044d\u0442\u043e <code>Error<\/code>, \u0430 \u043d\u0435 <code>Exception<\/code>: \u043c\u043e\u0439 <code>catch (e: Exception)<\/code> \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b, \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0430\u043b\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c. \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u2014 \u043d\u0438\u0436\u0435 API 31 \u0438\u043b\u0438 \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u2014 traceroute \u043f\u0440\u044f\u043c\u043e \u043f\u0438\u0448\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430, \u0430 \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a <code>*<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0437\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0449\u0443\u044e \u0441\u0435\u0442\u044c.<\/p>\n<p><strong>3. \u00ab\u041e\u0434\u043d\u0438 \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0445\u043e\u043f\u0430\u00bb \u2014 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0430\u0448 \u043a\u043e\u0434.<\/strong> \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u043c\u043e\u0439 traceroute \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0440\u043e\u0443\u0442\u0435\u0440 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0445\u043e\u043f\u0435, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 <code>*<\/code>, \u0445\u043e\u0442\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u043b. Mac \u0437\u0430 \u0442\u0435\u043c \u0436\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u043c \u0432 \u0442\u0443 \u0436\u0435 \u043c\u0438\u043d\u0443\u0442\u0443 (<code>ping -c 1 -m &lt;ttl&gt;<\/code>) \u043f\u043e\u043b\u0443\u0447\u0430\u043b Time Exceeded \u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0445\u043e\u043f\u043e\u0432, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u043e\u0432\u043f\u0430\u043b \u0441 Mac \u0445\u043e\u043f \u0432 \u0445\u043e\u043f. \u0413\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u0430\u044f. \u0412\u0445\u043e\u0434\u044f\u0449\u0443\u044e ICMP-\u043e\u0448\u0438\u0431\u043a\u0443 \u044f\u0434\u0440\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441 ping-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u0415\u0441\u043b\u0438 NAT \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0430 \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 ICMP-\u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043a\u0435\u0442\u0430 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442. Time Exceeded \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u0434\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u043f \u0438 \u0432\u0438\u0434\u0435\u043d. <code>ping<\/code> \u043d\u0430 macOS \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u0430\u043c, \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b\u043e \u0431\u044b, \u043f\u043e\u0447\u0435\u043c\u0443 \u0443 Mac \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0442, \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430. \u041d\u043e \u0435\u0441\u043b\u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0443, \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0443\u0442\u044c \u0441 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440.<\/p>\n<h3>\u0413\u0434\u0435 \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f<\/h3>\n<ul>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e IPv4 \u2014 \u0432 \u043c\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/strong> Ping-\u0441\u043e\u043a\u0435\u0442\u044b \u0435\u0441\u0442\u044c \u0438 \u0434\u043b\u044f IPv6 (<code>IPPROTO_ICMPV6<\/code>), \u043d\u043e \u043c\u043e\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0435\u0440\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e IPv4-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0435\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043c\u0451\u0440\u0442\u0432\u0430\u044f.<\/strong> \u0415\u0441\u043b\u0438 ICMP \u0440\u0435\u0436\u0443\u0442 \u043f\u043e \u043f\u0443\u0442\u0438, Path MTU \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0442 \u00ab\u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439\u00bb \u043e\u0442 \u00ab\u043f\u043e\u0442\u0435\u0440\u044f\u043d\u00bb, \u0430 traceroute \u043f\u043e\u043a\u0430\u0436\u0435\u0442 <code>*<\/code>. \u042d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 ICMP, \u0430 \u043d\u0435 \u0442\u0438\u043f\u0430 \u0441\u043e\u043a\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044c <\/strong><code><strong>ping_group_range<\/strong><\/code><strong>.<\/strong> \u041c\u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 <code>Os.socket<\/code> \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>EACCES<\/code>, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u0435\u043b\u043e \u0432 \u044d\u0442\u043e\u043c, \u0438 \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p>NetDiag+ \u0432 Google Play: <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.netdiag.android&amp;referrer=utm_source%3Dhabr%26utm_medium%3Darticle\" rel=\"noopener nofollow\">https:\/\/play.google.com\/store\/apps\/details?id=com.netdiag.android&amp;referrer=utm_source%3Dhabr%26utm_medium%3Darticle<\/a><\/p>\n<\/li>\n<li>\n<p>NetDiag+ \u0432 App Store: <a href=\"https:\/\/apps.apple.com\/app\/apple-store\/id6761954529?pt=128748487&amp;ct=habr&amp;mt=8\" rel=\"noopener nofollow\">https:\/\/apps.apple.com\/app\/apple-store\/id6761954529?pt=128748487&amp;ct=habr&amp;mt=8<\/a><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 Path MTU \u0432\u044b\u0448\u0435\u043b \u043c\u0435\u043d\u044c\u0448\u0435 1500 \u2014 \u0433\u0434\u0435 \u043c\u0435\u043d\u044f\u0442\u044c MTU \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0440\u043e\u0443\u0442\u0435\u0440\u0430\u0445: <a href=\"https:\/\/netdiag.online\/ru\/guides\/router-mtu\/\" rel=\"noopener nofollow\">https:\/\/netdiag.online\/ru\/guides\/router-mtu\/<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0410\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043d\u0435\u0442. \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 Firebase \u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u0430.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u043a \u0442\u0435\u043c, \u043a\u0442\u043e \u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0434 Android: \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438 \u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0433\u0434\u0435 <code>ping_group_range<\/code> \u0437\u0430\u043a\u0440\u044b\u0442, \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 API 31+, \u0433\u0434\u0435 \u043d\u0435\u0442 <code>StructCmsghdr<\/code>? \u0425\u043e\u0447\u0443 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u044f\u043c\u043e, \u0430 \u043d\u0435 \u0433\u0430\u0434\u0430\u043b\u043e. \u0418 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443 \u043f\u0440\u043e NAT \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430, \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1099252\/\">https:\/\/habr.com\/ru\/articles\/1099252\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u0430\u0434\u0438\u043b\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0451 iOS-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Android, \u044f \u0431\u044b\u043b \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e ping, traceroute \u0438 Path MTU \u0442\u0430\u043c \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. ICMP \u2014 \u044d\u0442\u043e raw-\u0441\u043e\u043a\u0435\u0442, raw-\u0441\u043e\u043a\u0435\u0442 \u2014 \u044d\u0442\u043e root, \u0430 \u0431\u0435\u0437 root \u044f \u0432\u0438\u0434\u0435\u043b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u0434\u0451\u0440\u0433\u0430\u0442\u044c \/system\/bin\/ping \u0438\u043b\u0438 \u043c\u0435\u0440\u0438\u0442\u044c TCP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0438\u043d\u0433\u043e\u043c. \u042f \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0430 TCP-\u043f\u043e\u0440\u0442\u044b \u2014 \u0438 \u0442\u0443\u0442 \u0437\u0430\u0434\u0430\u043b \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0443 ICMP \u043d\u0435\u0442 \u043f\u043e\u0440\u0442\u043e\u0432, \u0442\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0441\u0442\u0440\u043e\u044e \u043f\u0438\u043d\u0433 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0438\u0445? \u041e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:$ adb shell cat \/proc\/sys\/net\/ipv4\/ping_group_range02147483647\u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u0438 \u043f\u043b\u0430\u043d \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041d\u0430 \u0432\u0441\u0435\u0445 Android-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u0433\u0434\u0435 \u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ICMP-\u0441\u043e\u043a\u0435\u0442. \u0411\u0435\u0437 root \u0438 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043d\u0430 C.\u042d\u0442\u043e \u043f\u044f\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e NetDiag+ \u2014 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0438\u0448\u0443 \u043e\u0434\u0438\u043d. \u041f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e iOS: ping \u0438 traceroute \u0431\u0435\u0437 entitlements, MTR \u0438 Path MTU, \u0437\u0430\u043c\u0435\u0440 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0435\u0437 root \u0438 \u0442\u0438\u0445\u0438\u0439 403 \u043e\u0442 Cloudflare \u0432 \u0442\u0435\u0441\u0442\u0435 bufferbloat. \u041d\u0438\u0436\u0435 \u2014 \u043a\u0430\u043a \u043d\u0430 Android \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b ping, traceroute, MTR \u0438 Path MTU \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Kotlin \u0438 \u0433\u0434\u0435 \u0432\u0441\u0451 \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.Ping-\u0441\u043e\u043a\u0435\u0442\u044b: ICMP \u0431\u0435\u0437 raw-\u0441\u043e\u043a\u0435\u0442\u0430\u0412 Linux \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0435\u0441\u0442\u044c \u00abping-\u0441\u043e\u043a\u0435\u0442\u044b\u00bb: socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP). \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0448\u044c ICMP echo request \u043a\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u2014 \u044f\u0434\u0440\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 echo reply. \u041a\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u0435\u0442, \u0440\u0435\u0448\u0430\u0435\u0442 sysctl net.ipv4.ping_group_range. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u044f\u0434\u0440\u0435 \u043e\u043d \u0437\u0430\u043a\u0440\u044b\u0442 (1 0), \u0430 \u043d\u0430 Android-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u0440\u0443\u043f\u043f. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 Android \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438\u043c UID, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 NDK, \u0445\u0432\u0430\u0442\u0430\u0435\u0442 android.system.Os:val fd = Os.socket(OsConstants.AF_INET, OsConstants.SOCK_DGRAM, OsConstants.IPPROTO_ICMP)Os.setsockoptTimeval(fd, OsConstants.SOL_SOCKET, OsConstants.SO_RCVTIMEO,                     StructTimeval.fromMillis(timeoutMs))Os.sendto(fd, packet, 0, packet.size, 0, address, 0)val n = Os.recvfrom(fd, buf, 0, buf.size, 0, null)   \/\/ \u043f\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 \u0431\u0440\u043e\u0441\u0430\u0435\u0442 ErrnoException(EAGAIN)\u041f\u0430\u043a\u0435\u0442 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 8-\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a ICMP \u043f\u043b\u044e\u0441 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0442 raw-\u0441\u043e\u043a\u0435\u0442\u0430 \u0434\u0432\u0430 \u043e\u0442\u043b\u0438\u0447\u0438\u044f:\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u044f\u0434\u0440\u043e. \u0423 ping-\u0441\u043e\u043a\u0435\u0442\u0430 \u0441\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u0430\u043a \u0443 UDP-\u0441\u043e\u043a\u0435\u0442\u0430 \u0441\u0432\u043e\u0439 \u043f\u043e\u0440\u0442, \u0438 \u044f\u0434\u0440\u043e \u0441\u0430\u043c\u043e \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0435 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u0430 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u041e\u0442\u0432\u0435\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u044f\u0434\u0440\u043e. \u0421\u043e\u043a\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e echo reply \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c. \u0414\u0432\u0430 \u043f\u0438\u043d\u0433\u0430, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0447\u0443\u0436\u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u0432\u0438\u0434\u044f\u0442.\u0412\u043e\u0442 \u0437\u0434\u0435\u0441\u044c Android \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 iOS. \u041d\u0430 iPhone \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 SOCK_DGRAM-\u0441\u043e\u043a\u0435\u0442, \u043d\u043e Darwin \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b echo reply \u0438 \u0434\u0440\u0443\u0433\u0438\u043c ICMP-\u0441\u043e\u043a\u0435\u0442\u0430\u043c \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u043e\u0433\u0434\u0430 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0438\u043d\u0433\u0435\u0440, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0438\u043d\u0433\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 0 \u043c\u0441, \u043f\u043e\u043a\u0430 \u044f \u043d\u0435 \u043d\u0430\u0447\u0430\u043b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0441\u0430\u043c, \u2014 \u043e\u0431 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u041d\u0430 Android \u044d\u0442\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0434\u0435\u043b\u0430\u0435\u0442 \u044f\u0434\u0440\u043e.\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c \u044f \u0437\u0430\u0434\u0430\u044e \u0447\u0435\u0440\u0435\u0437 setsockoptTimeval, \u0430 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 API 29 \u2014 \u043e\u0442\u0441\u044e\u0434\u0430 minSdk 29. \u0411\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430. \u041d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0442\u0443 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0434\u0435\u043b\u0430\u0442\u044c Os.poll \u043f\u0435\u0440\u0435\u0434 recvfrom, \u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0438\u0436\u0435 29 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c.Traceroute: \u0445\u043e\u043f\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0448\u0438\u0431\u043e\u043aTraceroute \u0448\u043b\u0451\u0442 echo request \u0441 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c TTL. \u0420\u043e\u0443\u0442\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f TTL, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 ICMP Time Exceeded. \u0421 raw-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u044d\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0448\u044c. \u0421 ping-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u2014 \u043d\u0435\u0442: Linux \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0441\u043e\u043a\u0435\u0442\u0430, \u0438 \u0441\u0430\u043c \u043f\u0430\u043a\u0435\u0442 recvfrom() \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u0442.\u0427\u0442\u043e\u0431\u044b \u0438\u0445 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c IP_RECVERR \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0447\u0435\u0440\u0435\u0437 recvmsg(MSG_ERRQUEUE). \u041a\u0430\u0436\u0434\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 control-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 sock_extended_err, \u0430 \u0437\u0430 \u043d\u0435\u0439 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0438\u043b.\u0412 android.system.Os \u0435\u0441\u0442\u044c recvmsg, StructMsghdr \u0438 StructCmsghdr (API 31), \u043d\u043e \u043d\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442: IP_RECVERR \u0438 MSG_ERRQUEUE \u0432 OsConstants \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u044e \u0441\u044b\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f Linux:const val IP_RECVERR = 11const val MSG_ERRQUEUE = 0x2000Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, IP_RECVERR, 1)Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, OsConstants.IP_TTL, ttl)\/\/ \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0435\u0441\u043b\u0438 echo reply \u043d\u0435 \u043f\u0440\u0438\u0448\u0451\u043b:val iov = arrayOf(ByteBuffer.allocate(1500))val control = arrayOf(StructCmsghdr(OsConstants.IPPROTO_IP, IP_RECVERR, ByteArray(512)))val msg = StructMsghdr(null, iov, control, 0)Os.recvmsg(fd, msg, MSG_ERRQUEUE)   \/\/ EAGAIN, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430for (cmsg in msg.msg_control ?: emptyArray()) {    if (cmsg.cmsg_level != OsConstants.IPPROTO_IP || cmsg.cmsg_type != IP_RECVERR) continue    val d = cmsg.cmsg_data ?: continue    if (d.size &lt; 24) continue    if ((d[4].toInt() and 0xFF) != 2) continue          \/\/ ee_origin == SO_EE_ORIGIN_ICMP    val type = d[5].toInt() and 0xFF                     \/\/ ee_type: 11 Time Exceeded, 3 Unreachable    if (type != 11 &amp;&amp; type != 3) continue    val hop = (0 until 4).joinToString(&#171;.&#187;) { (d[20 + it].toInt() and 0xFF).toString() }    \/\/ hop \u2014 \u0440\u043e\u0443\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442\u0438\u043b}\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u2014 \u0438\u0437 sock_extended_err: origin \u0432 \u0431\u0430\u0439\u0442\u0435 4, \u0442\u0438\u043f ICMP \u0432 \u0431\u0430\u0439\u0442\u0435 5, \u0441 16-\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0434\u0451\u0442 sockaddr_in \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e IPv4-\u0430\u0434\u0440\u0435\u0441 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 20\u201323. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 cmsg_level \u0438 ee_origin \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043d\u043e\u0439\u044f, \u043d\u043e \u0431\u0435\u0437 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 control-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c \u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439, \u043d\u043e \u0432\u044b\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u0445\u043e\u043f.\u0421\u0430\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0435 \u0448\u043b\u0451\u0442, \u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c echo reply \u2014 \u043f\u043e \u043d\u0435\u043c\u0443 \u0446\u0438\u043a\u043b \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0448\u0451\u043b. MTR \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0446\u0438\u043a\u043b, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u043e \u043a\u0440\u0443\u0433\u0443, \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0445\u043e\u043f\u0443.Path MTU: \u0431\u0438\u0442 DF \u0431\u0435\u0437 raw-\u0441\u043e\u043a\u0435\u0442\u0430Path MTU \u2014 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0431\u0435\u0437 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. VPN, PPPoE \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 1500. \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043d\u0435 \u0431\u0435\u0434\u0430, \u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e \u043f\u0443\u0442\u0438 \u0440\u0435\u0436\u0443\u0442 ICMP Fragmentation Needed, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0430: \u043e\u0434\u043d\u0438 \u0441\u0430\u0439\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0441\u044f\u0442.\u041c\u0435\u0442\u043e\u0434 \u2014 echo request \u0441 \u0431\u0438\u0442\u043e\u043c don\u2019t fragment \u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443. Ping-\u0441\u043e\u043a\u0435\u0442 \u0443\u043c\u0435\u0435\u0442 \u0438 \u044d\u0442\u043e:const val IP_MTU_DISCOVER = 10const val IP_PMTUDISC_DO = 2Os.setsockoptInt(fd, OsConstants.IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO)\u0421 IP_PMTUDISC_DO \u044f\u0434\u0440\u043e \u0441\u0442\u0430\u0432\u0438\u0442 DF \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0435\u043c\u0443 MTU: sendto() \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 EMSGSIZE. \u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442\u0432\u0435\u0442 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442; \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u043b\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u2014 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e IP-\u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 ICMP \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0438\u043d\u0443\u0441 28 \u0431\u0430\u0439\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432. \u041f\u043e\u0438\u0441\u043a \u0438\u0434\u0451\u0442 \u043e\u0442 552 \u0434\u043e 1500 \u0431\u0430\u0439\u0442, \u044d\u0442\u043e \u043e\u043a\u043e\u043b\u043e \u0434\u0435\u0441\u044f\u0442\u0438 \u043f\u0440\u043e\u0431.\u041e\u0434\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0432\u044b\u0448\u043b\u043e: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 \u044f\u0434\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 getsockopt(IP_MTU) \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043a\u0438. \u0412 android.system.Os \u0435\u0441\u0442\u044c setsockoptInt, \u043d\u043e \u043d\u0435\u0442 getsockoptInt \u2014 \u0442\u043e\u043b\u044c\u043a\u043e getsockoptTimeval. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 NDK-\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u0434\u0430\u043b\u0430 \u0431\u044b. \u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0431\u0435\u0437 \u043d\u0435\u0451.\u041d\u0430 \u0447\u0451\u043c \u044f \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0441\u044f1. \u041c\u043e\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043f\u0438\u043d\u0433\u043e\u0432\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0412 \u043c\u043e\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0430 TCP \u0438 UDP, \u043d\u043e \u043d\u0435 ICMP \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c: \u0434\u0430\u0436\u0435 ping 1.1.1.1 \u0438\u0437 adb shell \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u043e\u043b\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u043b. \u0412\u0441\u0435 ICMP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u043b\u043e\u043c\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043e\u043c, \u0430 \u0432\u0441\u0435 TCP-\u0448\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u2014 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0442\u043e\u0447\u044c-\u0432-\u0442\u043e\u0447\u044c \u043a\u0430\u043a \u0431\u0430\u0433 \u0432 \u043c\u043e\u0451\u043c \u043a\u043e\u0434\u0435. \u041f\u0438\u043d\u0433 \u0434\u043e 10.0.2.2 (\u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u044d\u0442\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0445\u043e\u0441\u0442-\u043c\u0430\u0448\u0438\u043d\u044b) \u0434\u0430\u043b 0% \u043f\u043e\u0442\u0435\u0440\u044c: \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043e\u043a\u0435\u0442 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. ICMP \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435.2. \u0417\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 API, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442. \u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Os.recvmsg, StructMsghdr \u0438 StructCmsghdr \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 API 31. \u041d\u043e \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 Firebase Test Lab \u0441 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u043c API traceroute \u0443\u043f\u0430\u043b \u0441 NoClassDefFoundError: \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 Class.forName \u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u044e \u043e\u0442\u0432\u0435\u0442. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e NoClassDefFoundError \u2014 \u044d\u0442\u043e Error, \u0430 \u043d\u0435 Exception: \u043c\u043e\u0439 catch (e: Exception) \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b, \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043f\u0430\u043b\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c. \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u2014 \u043d\u0438\u0436\u0435 API 31 \u0438\u043b\u0438 \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u2014 traceroute \u043f\u0440\u044f\u043c\u043e \u043f\u0438\u0448\u0435\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u0430, \u0430 \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a *, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0437\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0449\u0443\u044e \u0441\u0435\u0442\u044c.3. \u00ab\u041e\u0434\u043d\u0438 \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0445\u043e\u043f\u0430\u00bb \u2014 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0430\u0448 \u043a\u043e\u0434. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u043c\u043e\u0439 traceroute \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0440\u043e\u0443\u0442\u0435\u0440 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0445\u043e\u043f\u0435, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 *, \u0445\u043e\u0442\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u043b. Mac \u0437\u0430 \u0442\u0435\u043c \u0436\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u043c \u0432 \u0442\u0443 \u0436\u0435 \u043c\u0438\u043d\u0443\u0442\u0443 (ping -c 1 -m &lt;ttl&gt;) \u043f\u043e\u043b\u0443\u0447\u0430\u043b Time Exceeded \u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0445\u043e\u043f\u043e\u0432, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u043e\u0432\u043f\u0430\u043b \u0441 Mac \u0445\u043e\u043f \u0432 \u0445\u043e\u043f. \u0413\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u0430\u044f. \u0412\u0445\u043e\u0434\u044f\u0449\u0443\u044e ICMP-\u043e\u0448\u0438\u0431\u043a\u0443 \u044f\u0434\u0440\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441 ping-\u0441\u043e\u043a\u0435\u0442\u043e\u043c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u0415\u0441\u043b\u0438 NAT \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0430 \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 ICMP-\u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043a\u0435\u0442\u0430 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442. Time Exceeded \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u0434\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u043f \u0438 \u0432\u0438\u0434\u0435\u043d. ping \u043d\u0430 macOS \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u0441\u0430\u043c, \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b\u043e \u0431\u044b, \u043f\u043e\u0447\u0435\u043c\u0443 \u0443 Mac \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0442, \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430. \u041d\u043e \u0435\u0441\u043b\u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0443, \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0443\u0442\u044c \u0441 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440.\u0413\u0434\u0435 \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f\u0422\u043e\u043b\u044c\u043a\u043e IPv4 \u2014 \u0432 \u043c\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. Ping-\u0441\u043e\u043a\u0435\u0442\u044b \u0435\u0441\u0442\u044c \u0438 \u0434\u043b\u044f IPv6 (IPPROTO_ICMPV6), \u043d\u043e \u043c\u043e\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0435\u0440\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e IPv4-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430.\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0435\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043c\u0451\u0440\u0442\u0432\u0430\u044f. \u0415\u0441\u043b\u0438 ICMP \u0440\u0435\u0436\u0443\u0442 \u043f\u043e \u043f\u0443\u0442\u0438, Path MTU \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0442 \u00ab\u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439\u00bb \u043e\u0442 \u00ab\u043f\u043e\u0442\u0435\u0440\u044f\u043d\u00bb, \u0430 traceroute \u043f\u043e\u043a\u0430\u0436\u0435\u0442 *. \u042d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 ICMP, \u0430 \u043d\u0435 \u0442\u0438\u043f\u0430 \u0441\u043e\u043a\u0435\u0442\u0430.\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044c ping_group_range. \u041c\u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 Os.socket \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 EACCES, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u0435\u043b\u043e \u0432 \u044d\u0442\u043e\u043c, \u0438 \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.\u0421\u0441\u044b\u043b\u043a\u0438NetDiag+ \u0432 Google Play: https:\/\/play.google.com\/store\/apps\/details?id=com.netdiag.android&amp;referrer=utm_source%3Dhabr%26utm_medium%3DarticleNetDiag+ \u0432 App Store: https:\/\/apps.apple.com\/app\/apple-store\/id6761954529?pt=128748487&amp;ct=habr&amp;mt=8\u0415\u0441\u043b\u0438 Path MTU \u0432\u044b\u0448\u0435\u043b \u043c\u0435\u043d\u044c\u0448\u0435 1500 \u2014 \u0433\u0434\u0435 \u043c\u0435\u043d\u044f\u0442\u044c MTU \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0440\u043e\u0443\u0442\u0435\u0440\u0430\u0445: https:\/\/netdiag.online\/ru\/guides\/router-mtu\/\u0410\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043d\u0435\u0442. \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 Firebase \u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u0430.\u0412\u043e\u043f\u0440\u043e\u0441 \u043a \u0442\u0435\u043c, \u043a\u0442\u043e \u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0434 Android: \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438 \u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0433\u0434\u0435 ping_group_range \u0437\u0430\u043a\u0440\u044b\u0442, \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 API 31+, \u0433\u0434\u0435 \u043d\u0435\u0442 StructCmsghdr? \u0425\u043e\u0447\u0443 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u044f\u043c\u043e, \u0430 \u043d\u0435 \u0433\u0430\u0434\u0430\u043b\u043e. \u0418 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443 \u043f\u0440\u043e NAT \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430, \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500224","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500224"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500224\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}