{"id":398176,"date":"2024-06-29T13:55:08","date_gmt":"2024-06-29T13:55:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398176"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398176","title":{"rendered":"<span>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 Linux, perf \u0438 eBPF<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/so\/j3\/si\/soj3siemp60ajusq3pw8pibuky0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/so\/j3\/si\/soj3siemp60ajusq3pw8pibuky0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u042f \u0434\u0430\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u0435\u0442\u0438 Linux. Linux \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 <a href=\"https:\/\/blog.yadutaf.fr\/2014\/01\/19\/introduction-to-linux-namespaces-part-5-net\/\">\u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d<\/a>. \u041a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 L3, mtr (Matt&#8217;s traceroute) \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0448\u0430\u043d\u0441\u044b \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u0443. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \/ \u043c\u043e\u0441\u0442 \/ \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438 \/ iptables \u0438 \u043f\u0430\u0440\u0443 \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e tcpdump \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0441\u0435\u0442\u0438, \u0442\u043e \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u043d\u0435\u0439, \u0432\u0430\u0441 \u0436\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0439 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442. <\/p>\n<p><a name=\"habracut\"><\/a>   <\/p>\n<p>\u0427\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u0436\u0435\u0442 \u043c\u043d\u0435: &#171;\u042d\u0439, \u044f \u0432\u0438\u0434\u0435\u043b \u0442\u0430\u043c \u0442\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442: \u043e\u043d \u043f\u0440\u043e\u0448\u0435\u043b \u044d\u0442\u0438\u043c \u043f\u0443\u0442\u0435\u043c, \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438&#187;.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d mtr \u0434\u043b\u044f L2.<\/p>\n<p>  <\/p>\n<p>\u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442? \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u0439!<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043b\u0435\u0433\u043a\u0438\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u043f\u0438\u043d\u0433\u0443\u0435\u0442\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Docker, \u043e\u043d \u0432\u044b\u0434\u0430\u0441\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># ping -4 172.17.0.2 [  4026531957]          docker0 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026531957]      vetha373ab6 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026532258]             eth0 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026532258]             eth0   reply #17146.001 172.17.0.2 -> 172.17.0.1 [  4026531957]      vetha373ab6   reply #17146.001 172.17.0.2 -> 172.17.0.1 [  4026531957]          docker0   reply #17146.001 172.17.0.2 -> 172.17.0.1<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"trassirovka-k-spaseniyu\">\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043a \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u044e<\/h3>\n<p>  <\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u2014 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0438\u0441\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0433\u0440\u044b. \u0414\u0440\u0443\u0433\u043e\u0439 \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u044d\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u043d\u0430\u044e\u0449\u0435\u0433\u043e \u0433\u0434\u0435 \u0432\u044b\u0445\u043e\u0434.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 Linux \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0430, \u0433\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u044f\u0440\u043b\u044b\u043a\u0438, \u0430 \u043d\u0435 &#171;\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b&#187;. \u041f\u0430\u043a\u0435\u0442\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0441\u044c \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. <strong>perf<\/strong> \u0438 <strong>eBPF<\/strong>.<\/p>\n<p>  <\/p>\n<h3 id=\"vvedenie-v-perf-i-ebpf\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 perf \u0438 eBPF<\/h3>\n<p>  <\/p>\n<p><strong>perf<\/strong> \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 Linux. \u041e\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u0442\u043a\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0447\u0442\u043e \u0438 \u044f\u0434\u0440\u043e Linux \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d \u0434\u043b\u044f \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u0418\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u0430\u043a \u044f\u0434\u0440\u0430, \u0442\u0430\u043a \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u043b\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u043e <strong>perf<\/strong> \u043a\u0430\u043a \u043e \u043d\u0430\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 <strong>strace<\/strong> \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u043a\u0430\u043c\u0438. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e perf, \u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c <a href=\"http:\/\/www.brendangregg.com\/perf.html\">\u043f\u043e\u0441\u0435\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u0433 \u0411\u0440\u044d\u043d\u0434\u0430\u043d\u0430 \u0413\u0440\u0435\u0433\u0433\u0430 (Brendan Gregg)<\/a>.<\/p>\n<p>  <\/p>\n<p><strong>eBPF<\/strong> \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u044f\u0434\u0440\u0443 Linux. \u041a\u0430\u043a \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438, \u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f (extended) \u0432\u0435\u0440\u0441\u0438\u044f BPF bytecode, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a &#171;Berkeley Packet Filter&#187;, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f\u2026 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0435 BSD. \u041d\u0443 \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438. \u0412 Linux \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044f\u0434\u0440\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u044d\u0442\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u0414\u041e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0415\u0441\u043b\u0438 \u044f\u0434\u0440\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u044d\u0442\u043e, \u0442\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f QOS, \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0435\u0442\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438 eXpress Data Plane (XDP), \u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445. \u0417\u043e\u043d\u0434\u044b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u044c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 <strong>\/proc\/kallsyms<\/strong> \u0438\u043b\u0438 \u043b\u044e\u0431\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044e\u0441\u044c \u043d\u0430 \u0430\u0433\u0435\u043d\u0442\u0430\u0445 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u043a \u0442\u043e\u0447\u043a\u0430\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. <\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0437\u043e\u043d\u0434\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0434\u0440\u0430, \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043c\u044f\u0433\u043a\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 <a href=\"https:\/\/blog.yadutaf.fr\/2016\/03\/30\/turn-any-syscall-into-event-introducing-ebpf-kernel-probes\/\">\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u043e\u0441\u0442 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 eBPF<\/a>.<\/p>\n<p>  <\/p>\n<h3 id=\"nastroyka-lab\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Lab<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d perf \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 eBPF. \u042f \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0430\u043d\u0430\u0442 \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0437\u0434\u0435\u0441\u044c <a href=\"https:\/\/github.com\/iovisor\/bcc\">bcc<\/a>. \u042d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438 \u0433\u0438\u0431\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0437\u043e\u043d\u0434\u043e\u0432 \u044f\u0434\u0440\u0430 \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u0421\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 Python. \u0422\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u043e \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u0435, \u043d\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438!<\/p>\n<p>  <\/p>\n<p>\u042f \u043f\u043e\u0432\u0442\u043e\u0440\u044e \u0437\u0434\u0435\u0441\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0434\u043b\u044f Ubuntu 17.04 (Zesty), \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u041e\u0421 \u043d\u0430 \u043c\u043e\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f &#171;perf&#187; \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432, \u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e <a href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/INSTALL.md\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 bcc \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 GitHub<\/a>.<\/p>\n<p>  <\/p>\n<blockquote><p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f eBPF \u043a \u0442\u043e\u0447\u043a\u0430\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u044f\u0434\u0440\u0430 Linux \u043d\u0435 \u043d\u0438\u0436\u0435 4.7.<\/p><\/blockquote>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <strong>perf<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># Grab 'perf' sudo apt install linux-tools-generic  # Test it perf<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u043b\u0438. <\/p>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <strong>bcc<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># Install dependencies sudo apt install bison build-essential cmake flex git libedit-dev python zlib1g-dev libelf-dev libllvm4.0 llvm-dev libclang-dev luajit luajit-5.1-dev  # Grab the sources git clone https:\/\/github.com\/iovisor\/bcc.git  # Build and install mkdir bcc\/build cd bcc\/build cmake .. -DCMAKE_INSTALL_PREFIX=\/usr make sudo make install<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"poisk-horoshih-tochek-trassirovki-ili-ruchnaya-trassirovka-puti-paketa-s-perf\">\u041f\u043e\u0438\u0441\u043a \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u043b\u0438 &#171;\u0440\u0443\u0447\u043d\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0443\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 perf\u201d<\/h3>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043d\u0430\u0439\u0442\u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u043d\u0430\u0447\u0430\u043b \u0441 \u043a\u043e\u0434\u0430 veth \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, \u0438 \u043f\u043e\u0448\u0435\u043b \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041e\u0431\u0449\u0438\u0435 \u043f\u0443\u0442\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043d\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445) \u043c\u0435\u0442\u043e\u0434\u0430\u0445. \u0422\u043e\u0433\u0434\u0430 \u0436\u0435 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0443 Linux \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0435\u0439 \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u044e\u0449\u0435, \u043d\u043e \u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 (\u0434\u043b\u044f \u043c\u0435\u043d\u044f).<\/p>\n<p>  <\/p>\n<p>\u0425\u0432\u0430\u0442\u0438\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u043e\u0431\u043e \u043c\u043d\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>  <\/p>\n<p>\u0426\u0435\u043b\u044c \u2014 \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u0443\u0442\u044c, \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u043c. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u043c\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f (\u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c).<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0438\u043d\u0433 \u0434\u0432\u0443\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438 \u0434\u0432\u0443\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043e\u0442 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 perf.<\/p>\n<p>  <\/p>\n<ol>\n<li>localhost \u0441 IP <em>127.0.0.1<\/em><\/li>\n<li>\u041d\u0435\u0432\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Docker \u0441 IP <em>172.17.0.2<\/em><\/li>\n<li>\u041c\u043e\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0447\u0435\u0440\u0435\u0437 USB \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0441 IP <em>192.168.42.129<\/em><\/li>\n<li>\u041c\u043e\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0447\u0435\u0440\u0435\u0437 WiFi \u0441 IP <em>192.168.43.1<\/em><\/li>\n<\/ol>\n<p>  <\/p>\n<p>perf trace \u044d\u0442\u043e \u043f\u043e\u0434\u043a\u043e\u043c\u0430\u043d\u0434\u0430 perf, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0441\u0445\u043e\u0436\u0438\u0439 \u0441 strace (\u0441 \u0413\u041e\u0420\u0410\u0417\u0414\u041e \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u044e). \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u00abnet\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 ping \u0434\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 Docker \u0441 IP 172.17.0.2 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">sudo perf trace --no-syscalls --event 'net:*' ping 172.17.0.2 -c1 > \/dev\/null      0.000 net:net_dev_queue:dev=docker0 skbaddr=0xffff96d481988700 len=98)      0.008 net:net_dev_start_xmit:dev=docker0 queue_mapping=0 skbaddr=0xffff96d481988700 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)      0.014 net:net_dev_queue:dev=veth79215ff skbaddr=0xffff96d481988700 len=98)      0.016 net:net_dev_start_xmit:dev=veth79215ff queue_mapping=0 skbaddr=0xffff96d481988700 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)      0.020 net:netif_rx:dev=eth0 skbaddr=0xffff96d481988700 len=84)      0.022 net:net_dev_xmit:dev=veth79215ff skbaddr=0xffff96d481988700 len=98 rc=0)      0.024 net:net_dev_xmit:dev=docker0 skbaddr=0xffff96d481988700 len=98 rc=0)      0.027 net:netif_receive_skb:dev=eth0 skbaddr=0xffff96d481988700 len=84)      0.044 net:net_dev_queue:dev=eth0 skbaddr=0xffff96d481988b00 len=98)      0.046 net:net_dev_start_xmit:dev=eth0 queue_mapping=0 skbaddr=0xffff96d481988b00 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=0 len=98 data_len=0 network_offset=14 transport_offset_valid=1 transport_offset=34 tx_flags=0 gso_size=0 gso_segs=0 gso_type=0)      0.048 net:netif_rx:dev=veth79215ff skbaddr=0xffff96d481988b00 len=84)      0.050 net:net_dev_xmit:dev=eth0 skbaddr=0xffff96d481988b00 len=98 rc=0)      0.053 net:netif_receive_skb:dev=veth79215ff skbaddr=0xffff96d481988b00 len=84)      0.060 net:netif_receive_skb_entry:dev=docker0 napi_id=0x3 queue_mapping=0 skbaddr=0xffff96d481988b00 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=2 hash=0x00000000 l4_hash=0 len=84 data_len=0 truesize=768 mac_header_valid=1 mac_header=-14 nr_frags=0 gso_size=0 gso_type=0)      0.061 net:netif_receive_skb:dev=docker0 skbaddr=0xffff96d481988b00 len=84)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 skbaddr, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0435\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">net_dev_queue           dev=docker0     skbaddr=0xffff96d481988700 net_dev_start_xmit      dev=docker0     skbaddr=0xffff96d481988700 net_dev_queue           dev=veth79215ff skbaddr=0xffff96d481988700 net_dev_start_xmit      dev=veth79215ff skbaddr=0xffff96d481988700 netif_rx                dev=eth0        skbaddr=0xffff96d481988700 net_dev_xmit            dev=veth79215ff skbaddr=0xffff96d481988700 net_dev_xmit            dev=docker0     skbaddr=0xffff96d481988700 netif_receive_skb       dev=eth0        skbaddr=0xffff96d481988700  net_dev_queue           dev=eth0        skbaddr=0xffff96d481988b00 net_dev_start_xmit      dev=eth0        skbaddr=0xffff96d481988b00 netif_rx                dev=veth79215ff skbaddr=0xffff96d481988b00 net_dev_xmit            dev=eth0        skbaddr=0xffff96d481988b00 netif_receive_skb       dev=veth79215ff skbaddr=0xffff96d481988b00 netif_receive_skb_entry dev=docker0     skbaddr=0xffff96d481988b00 netif_receive_skb       dev=docker0     skbaddr=0xffff96d481988b00<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441. \u0421\u0430\u043c\u043e\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u2014 skbaddr \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, \u043d\u043e \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u043a\u0435\u0442 \u044d\u0445\u043e-\u043e\u0442\u0432\u0435\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441 (\u043f\u0438\u043d\u0433). \u041e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a \u0434\u043e\u0440\u043e\u0433\u043e&#8230;<\/p>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u043c\u044b \u044f\u0441\u043d\u043e \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0441\u0442 docker0, \u0437\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 veth \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0445\u043e\u0441\u0442\u0430, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e veth79215ff, \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 veth, \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0443\u044e\u0441\u044f eth0. \u0412\u044b \u0435\u0449\u0435 \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438, \u043d\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043e\u0431\u0437\u043e\u0440.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0430 eth0, \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u042d\u0442\u043e \u043d\u0435 \u043e\u0442\u043a\u043b\u0438\u043a, \u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 4 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0443\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u0430. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445:<\/p>\n<p>  <\/p>\n<ul>\n<li>net_dev_queue<\/li>\n<li>netif_receive_skb_entry<\/li>\n<li>netif_rx<\/li>\n<li>napi_gro_receive_entry<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u0430\u0441\u0442 \u043c\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u044b\u0431\u043e\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">sudo perf trace --no-syscalls           \\   --event 'net:net_dev_queue'           \\   --event 'net:netif_receive_skb_entry' \\   --event 'net:netif_rx'                \\   --event 'net:napi_gro_receive_entry'  \\   ping 172.17.0.2 -c1 > \/dev\/null      0.000 net:net_dev_queue:dev=docker0 skbaddr=0xffff8e847720a900 len=98)      0.010 net:net_dev_queue:dev=veth7781d5c skbaddr=0xffff8e847720a900 len=98)      0.014 net:netif_rx:dev=eth0 skbaddr=0xffff8e847720a900 len=84)      0.034 net:net_dev_queue:dev=eth0 skbaddr=0xffff8e849cb8cd00 len=98)      0.036 net:netif_rx:dev=veth7781d5c skbaddr=0xffff8e849cb8cd00 len=84)      0.045 net:netif_receive_skb_entry:dev=docker0 napi_id=0x1 queue_mapping=0 skbaddr=0xffff8e849cb8cd00 vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800 ip_summed=2 hash=0x00000000 l4_hash=0 len=84 data_len=0 truesize=768 mac_header_valid=1 mac_header=-14 nr_frags=0 gso_size=0 gso_type=0)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u0438\u0441\u0441\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430!<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0439\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c perf list:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">sudo perf list 'net:*'<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f net:netif_rx. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435\u043c \u044d\u0442\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u2018net\u2019). \u041f\u043e\u0441\u043b\u0435 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u044d\u0442\u043e \u0438\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438. <\/p>\n<p>  <\/p>\n<h3 id=\"pishem-zakaznoy-trassirovschik-s-pomoschyu-ebpf--bcc\">\u041f\u0438\u0448\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043d\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e eBPF \/ bcc<\/h3>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439. \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Linux, \u0432\u044b \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u0441\u0451 \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u041d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0440\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438, \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 IP, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0442\u0435\u0440\u043f\u0438\u0442\u0435 \u043c\u0435\u043d\u044f \u0435\u0449\u0451. <\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Linux Kernel 4.7, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f eBPF \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u0442\u043e\u0447\u043a\u0430\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u044f\u0434\u0440\u0430. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u0434\u043e\u0432 \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u044f\u0434\u0440\u0430. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0431\u044b\u043b\u043e \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 API \u044f\u0434\u0440\u0430 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438.<\/li>\n<li>\u0412 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b. \u041d\u0438\u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c. <\/li>\n<li>\u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043e\u0442 \u0441\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0431\u044b\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c kprobes, \u0447\u0442\u043e \u043b\u0435\u0433\u0447\u0435, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u044b\u043b\u0438 \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p>  <\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0447\u0435\u0441\u0442\u043d\u044b, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c kprobe. \u0418 \u0445\u043e\u0442\u044f \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u043e\u0441\u0442\u044b. [\u201c\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0432 \u0437\u043e\u043d\u0434\u044b \u044f\u0434\u0440\u0430 eBPF\u201d] (\/2016\/03\/30\/turn-any-syscall-into-event-introducing-ebpf-kernel-probes\/).<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0430\u0434\u0438, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u201chello world\u201d \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 plumbing \u043d\u0430 \u043c\u0435\u0441\u0442\u043e. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 (net_dev_queue, netif_receive_skb_entry, netif_rx \u0438 napi_gro_receive_entry). \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043c\u044b \u043f\u043e\u0448\u043b\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u0438\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#include &lt;bcc\/proto.h> #include &lt;linux\/sched.h>  \/\/ Event structure struct route_evt_t {         char comm[TASK_COMM_LEN]; }; BPF_PERF_OUTPUT(route_evt);  static inline int do_trace(void* ctx, struct sk_buff* skb) {     \/\/ Built event for userland     struct route_evt_t evt = {};     bpf_get_current_comm(evt.comm, TASK_COMM_LEN);      \/\/ Send event to userland     route_evt.perf_submit(ctx, &amp;evt, sizeof(evt));      return 0; }  \/**   * Attach to Kernel Tracepoints   *\/  TRACEPOINT_PROBE(net, netif_rx) {     return do_trace(args, (struct sk_buff*)args->skbaddr); }  TRACEPOINT_PROBE(net, net_dev_queue) {     return do_trace(args, (struct sk_buff*)args->skbaddr); }  TRACEPOINT_PROBE(net, napi_gro_receive_entry) {     return do_trace(args, (struct sk_buff*)args->skbaddr); }  TRACEPOINT_PROBE(net, netif_receive_skb_entry) {     return do_trace(args, (struct sk_buff*)args->skbaddr); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0438\u043f\u0430 \u201cnet\u201d, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u043e\u043b\u0435 skbaddr \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e, \u0433\u0434\u0435 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438\u0441\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u044d\u0442\u0438 args->skbaddr, \u0442\u043e \u0437\u043d\u0430\u0439\u0442\u0435, \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e bcc, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 TRACEPOINT_PROBE. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u0435\u0442\u0443, \u043d\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u041d\u041e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043f\u043e\u0443\u043c\u043d\u0435\u0435. \u041c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u044f\u0434\u0440\u043e. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0445\u043e\u0434 \/sys\/kernel\/debug\/tracing\/events \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f net:netif_rx \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0435\u043c \u201ccat\u201d \/sys\/kernel\/debug\/tracing\/events\/net\/netif_rx\/format \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">name: netif_rx ID: 1183 format:     field:unsigned short common_type;         offset:0; size:2; signed:0;     field:unsigned char common_flags;         offset:2; size:1; signed:0;     field:unsigned char common_preempt_count; offset:3; size:1; signed:0;     field:int common_pid;                     offset:4; size:4; signed:1;      field:void * skbaddr;         offset:8;  size:8; signed:0;     field:unsigned int len;       offset:16; size:4; signed:0;     field:__data_loc char[] name; offset:20; size:4; signed:1;  print fmt: \"dev=%s skbaddr=%p len=%u\", __get_str(name), REC->skbaddr, REC->len<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u201cprint fmt\u201d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u042d\u0442\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a perf \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430. <\/p>\n<p>  <\/p>\n<p>\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c plumbing \u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u0441\u0443\u0442\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 Python \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0437\u043e\u043d\u0434\u0430 eBPF:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env python # coding: utf-8  from socket import inet_ntop from bcc import BPF import ctypes as ct  bpf_text = '''&lt;SEE CODE SNIPPET ABOVE>'''  TASK_COMM_LEN = 16 # linux\/sched.h  class RouteEvt(ct.Structure):     _fields_ = [         (\"comm\",    ct.c_char * TASK_COMM_LEN),     ]  def event_printer(cpu, data, size):     # Decode event     event = ct.cast(data, ct.POINTER(RouteEvt)).contents      # Print event     print \"Just got a packet from %s\" % (event.comm)  if __name__ == \"__main__\":     b = BPF(text=bpf_text)     b[\"route_evt\"].open_perf_buffer(event_printer)      while True:         b.kprobe_poll()<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u044b root \u043f\u0440\u0430\u0432\u0430.<\/p>\n<p>  <\/p>\n<blockquote><p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u0430\u0436\u0435 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0435\u0442\u0438 \u0432\u0430\u0448\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0445\u043b\u0430\u043c\u043b\u044f\u0442\u044c\u0441\u044f.<\/p><\/blockquote>\n<p>  <\/p>\n<pre><code class=\"bash\"> $> sudo python .\/tracepkt.py ... Just got a packet from ping6 Just got a packet from ping6 Just got a packet from ping Just got a packet from irq\/46-iwlwifi ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b ping \u0438 ping6, \u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 WiFi \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0417\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u0431\u044b\u043b \u044d\u0445\u043e-\u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \/ \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0435 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0441\u044c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043a\u0430\u0436\u0443\u0442 \u0441\u0435\u0431\u044f \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u043b\u0430\u0431\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b eBPF. \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 IP. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u0432\u0430\u0448 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a. <\/p>\n<p>  <\/p>\n<blockquote><p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u043d\u0435 \u0443\u0434\u043b\u0438\u043d\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u044f \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u044e\u0441\u044c \u043d\u0430 C\/eBPF. \u042f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043a\u043e\u043d\u0446\u0435. <\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"dobavlenie-informacii-o-setevom-interfeyse\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u044f \u201ccomm\u201d, loading \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a sched.h. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b. <\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 net\/inet_sock.h, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u043d\u044b, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c char ifname[IFNAMSIZ]; \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u042d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0438 \u043e\u043d\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ Get device pointer, we'll need it to get the name and network namespace struct net_device *dev; bpf_probe_read(&amp;dev, sizeof(skb->dev), ((char*)skb) + offsetof(typeof(*skb), dev));  \/\/ Load interface name bpf_probe_read(&amp;evt.ifname, IFNAMSIZ, dev->name);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u2014 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0418 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Python \ud83d\ude42<\/p>\n<p>  <\/p>\n<p>\u041e\u043a\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u043c\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u042f \u043d\u0430\u0447\u043d\u0443 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e, \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0445\u043e\u0442\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u043d\u0430 \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c bpf_probe_read \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b IFNAMSIZ \u0438\u0437 dev->name \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 evt.ifname. \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0439 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0435. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f skb-> dev \u0432 dev. \u041a \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e offsetof \/ typeof \u0442\u0440\u044e\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c eBPF \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u044f\u0434\u0440\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u041b\u044e\u0431\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a\u0435, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f bpf_probe_read. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u043c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \\ \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. bpf_probe_read \u044d\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 memcpy, \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432 bpf_trace.c \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430. \u0410 \u0432\u043e\u0442 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 memcpy. \u0411\u0443\u0434\u044c\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \u043f\u0430\u0434\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437-\u0437\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043f\u0438\u0439. <\/li>\n<li>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0435\u0440\u043d\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 0, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0440\u0432\u0435\u0442 \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. <\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0412 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#define member_read(destination, source_struct, source_member)                 \\   do{                                                                          \\     bpf_probe_read(                                                            \\       destination,                                                             \\       sizeof(source_struct->source_member),                                    \\       ((char*)source_struct) + offsetof(typeof(*source_struct), source_member) \\     );                                                                         \\   } while(0)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">member_read(&amp;dev, skb, dev);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a-\u0442\u043e \u043b\u0443\u0447\u0448\u0435!<\/p>\n<p>  <\/p>\n<h3 id=\"dobavim-id-v-prostranstvo-imen-seti\">\u0414\u043e\u0431\u0430\u0432\u0438\u043c ID \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438.<\/h3>\n<p>  <\/p>\n<p>\u042d\u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0446\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439, \u043d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0438 \u0441\u0430\u043c\u0430\u044f \u0442\u0440\u0443\u0434\u043d\u0430\u044f \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. <\/p>\n<p>  <\/p>\n<p>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u043a\u0435\u0442\u0430 \u2018sk\u2019<\/li>\n<li>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u2018dev\u2019<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043e\u043a\u0435\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0442\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043d\u0435\u0439 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 <a href=\"https:\/\/github.com\/iovisor\/bcc\/blob\/master\/tools\/solisten.py\/link\">solisten.py<\/a>. \u041a \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044f \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u043f\u043e\u0447\u0435\u043c\u0443, \u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d. \u0412 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044f \u0432\u0441\u0435 \u043d\u0443\u043b\u0438, \u0447\u0442\u043e \u044f\u0441\u043d\u043e \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043a\u0430\u043a \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f bpf_probe_read \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043e\u043a) \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043b\u043e\u043c\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<p>  <\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0414\u0443\u043c\u0430\u0439\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c, \u043a\u0430\u043a \u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u043a \u043f\u0430\u043a\u0435\u0442\u0443, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043e\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0438 \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443, \u0432 \u0447\u044c\u0435\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0443 \u0438\u043c\u0435\u043d \u043e\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442. <\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">struct net* net;  \/\/ Get netns id. Equivalent to: evt.netns = dev->nd_net.net->ns.inum possible_net_t *skc_net = &amp;dev->nd_net; member_read(&amp;net, skc_net, net); struct ns_common* ns = member_address(net, ns); member_read(&amp;evt.netns, ns, inum);  \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.  #define member_address(source_struct, source_member) \\ ({                                                   \\   void* __ret;                                       \\   __ret = (void*) (((char*)source_struct) + offsetof(typeof(*source_struct), source_member)); \\   __ret;                                             \\ })<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u044d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 member_read. \u041e\u0441\u0442\u0430\u0432\u043b\u044e \u044d\u0442\u043e \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f. <\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u044d\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u2026 \u0432\u0443\u0430\u043b\u044f! <\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">$> sudo python .\/tracepkt.py [  4026531957]          docker0 [  4026531957]      vetha373ab6 [  4026532258]             eth0 [  4026532258]             eth0 [  4026531957]      vetha373ab6 [  4026531957]          docker0<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Docker. \u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0441\u0442 docker0, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0430\u0440\u0435 veth, \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0443\u0442\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e!<\/p>\n<p>  <\/p>\n<h3 id=\"idem-dalshe-trassirovat-tolko-zaprashivaemye-otvety-i-eho-otvety-paketov\">\u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435: \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0438 \u044d\u0445\u043e-\u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/h3>\n<p>  <\/p>\n<p>\u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c IP \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0445\u043e\u0442\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a IP \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u042f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f IPv4, \u043d\u043e \u044d\u0442\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438 \u0434\u043b\u044f IPv6.<\/p>\n<p>  <\/p>\n<p>\u041f\u043b\u043e\u0445\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u044f\u0434\u0440\u043e\u043c \u0432 \u043f\u043b\u0430\u043d\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0435\u0449\u0435 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0435\u0449\u0435 \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0451, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 MAC \u0430\u0434\u0440\u0435\u0441\u0430, \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IP, \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c ICMP.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443, \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 MAC \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IP. \u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a MAC \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043e\u043d \u0432 \u0434\u043b\u0438\u043d\u0443 14 \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ Compute MAC header address char* head; u16 mac_header;  member_read(&amp;head,       skb, head); member_read(&amp;mac_header, skb, mac_header);  \/\/ Compute IP Header address #define MAC_HEADER_SIZE 14; char* ip_header_address = head + mac_header + MAC_HEADER_SIZE;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a IP \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 skb->head + skb->mac_header + MAC_HEADER_SIZE;.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e IP \u043f\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u0431\u0438\u0442\u0430\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e IPv4.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ Load IP protocol version u8 ip_version; bpf_probe_read(&amp;ip_version, sizeof(u8), ip_header_address); ip_version = ip_version >> 4 &amp; 0xf;  \/\/ Filter IPv4 packets if (ip_version != 4) {     return 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c: \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432\u0435\u0441\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a IP, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u0430\u043c IP, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e Python \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435. \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u044d\u0442\u043e ICMP, \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 ICMP. <\/p>\n<p>  <\/p>\n<p>\u0414\u0430, \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u0441\u0451:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/\/ Load IP Header struct iphdr iphdr; bpf_probe_read(&amp;iphdr, sizeof(iphdr), ip_header_address);  \/\/ Load protocol and address u8 icmp_offset_from_ip_header = iphdr.ihl * 4; evt.saddr[0] = iphdr.saddr; evt.daddr[0] = iphdr.daddr;  \/\/ Filter ICMP packets if (iphdr.protocol != IPPROTO_ICMP) {     return 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a ICMP \u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u044d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0432\u0435\u0442\u0430, \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e id \u0438 seq:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"> \/\/ Compute ICMP header address and load ICMP header char* icmp_header_address = ip_header_address + icmp_offset_from_ip_header; struct icmphdr icmphdr; bpf_probe_read(&amp;icmphdr, sizeof(icmphdr), icmp_header_address);  \/\/ Filter ICMP echo request and echo reply if (icmphdr.type != ICMP_ECHO &amp;&amp; icmphdr.type != ICMP_ECHOREPLY) {     return 0; }  \/\/ Get ICMP info evt.icmptype = icmphdr.type; evt.icmpid   = icmphdr.un.echo.id; evt.icmpseq  = icmphdr.un.echo.sequence;  \/\/ Fix endian evt.icmpid  = be16_to_cpu(evt.icmpid); evt.icmpseq = be16_to_cpu(evt.icmpseq);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u0440\u0435\u0431\u044f\u0442\u0430!<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c ICMP \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 ping, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e evt.icmpid \u044d\u0442\u043e PID ping, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f ping Linux.<\/p>\n<p>  <\/p>\n<h3 id=\"vremya-dlya-shou\">\u0412\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0448\u043e\u0443!<\/h3>\n<p>  <\/p>\n<p>\u0418\u043c\u0435\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Python \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 root, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u201cping\u201d \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0439\u0442\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># ping -4 localhost [  4026531957]               lo request #20212.001 127.0.0.1 -> 127.0.0.1 [  4026531957]               lo request #20212.001 127.0.0.1 -> 127.0.0.1 [  4026531957]               lo   reply #20212.001 127.0.0.1 -> 127.0.0.1 [  4026531957]               lo   reply #20212.001 127.0.0.1 -> 127.0.0.1<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441 ICMP \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c 20212 (ICMP id \u0432 ping Linux) \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 loopback, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0433\u0434\u0435 \u044d\u0445\u043e-\u043e\u0442\u0432\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0430\u0434. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 loopback \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u043c, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0410 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043c\u043e\u0435\u0433\u043e WiFi \u0448\u043b\u044e\u0437\u0430?<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># ping -4 192.168.43.1 [  4026531957]           wlp2s0 request #20710.001 192.168.43.191 -> 192.168.43.1 [  4026531957]           wlp2s0   reply #20710.001 192.168.43.1 -> 192.168.43.191<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u044d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441, \u0438 \u044d\u0445\u043e-\u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 WiFi. \u041b\u0435\u0433\u043a\u043e\u0442\u043d\u044f.<\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0435\u0441\u044f \u043a \u0434\u0435\u043b\u0443: \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u00abcomm\u00bb \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432\u043b\u0430\u0434\u0435\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u043c? \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 ping, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443 WiFi, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0435\u0433\u043e \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e Linux.<\/p>\n<p>  <\/p>\n<p>\u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u043c\u043e\u0435 \u043b\u044e\u0431\u0438\u043c\u043e\u0435 \u2014 \u043f\u0438\u043d\u0433 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 Docker. \u042d\u0442\u043e \u043c\u043e\u0451 \u041d\u0415\u043b\u044e\u0431\u0438\u043c\u043e\u0435 \u0438\u0437-\u0437\u0430 Docker, \u0438 \u043b\u044e\u0431\u0438\u043c\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u043b\u0443 eBPF. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u00ab\u0440\u0435\u043d\u0442\u0433\u0435\u043d\u043e\u0432\u0441\u043a\u0438\u0439\u00bb \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u0438\u043d\u0433\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># ping -4 172.17.0.2 [  4026531957]          docker0 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026531957]      vetha373ab6 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026532258]             eth0 request #17146.001 172.17.0.1 -> 172.17.0.2 [  4026532258]             eth0   reply #17146.001 172.17.0.2 -> 172.17.0.1 [  4026531957]      vetha373ab6   reply #17146.001 172.17.0.2 -> 172.17.0.1 [  4026531957]          docker0   reply #17146.001 172.17.0.2 -> 172.17.0.1<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u043c\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">      Host netns           | Container netns +---------------------------+-----------------+ | docker0 ---> veth0e65931 ---> eth0          | +---------------------------+-----------------+<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  <\/p>\n<p>eBPF \/ bcc \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438, \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u043c\u0435\u0441\u0442\u0430\u0445, \u0440\u0430\u043d\u0435\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445, \u0431\u0435\u0437 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0430. \u0422\u043e\u0447\u043a\u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u043e \u0442\u043e\u0447\u043a\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u044f\u0434\u0440\u0430 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b\u0438 \u0431\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f kprobes, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. <\/p>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 IPv6. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u044d\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u043e\u0447\u0435\u043d\u044c \u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439. \u0411\u044b\u043b\u043e \u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438, iptables \u0438 ARP-\u043f\u0430\u043a\u0435\u0442\u044b. \u0412\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u043e \u0431\u044b \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u00ab\u0440\u0435\u043d\u0442\u0433\u0435\u043d\u043e\u0432\u0441\u043a\u0438\u0439\u00bb \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043b\u044e\u0434\u0435\u0439, \u043a\u0430\u043a \u044f, \u043a\u0442\u043e \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0431\u043e\u0440\u043e\u043b\u0441\u044f \u0441 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 Linux.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 IPv6) \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/yadutaf\/tracepkt\">Github<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c <a href=\"https:\/\/twitter.com\/fcabestre\">@fcabestre<\/a> \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c, \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0437 \u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e\u0433\u043e \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430, <a href=\"https:\/\/twitter.com\/bluxte\">@bluxte<\/a> \u0437\u0430 \u0435\u0433\u043e \u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u0443\u044e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043b\u044e\u0434\u0435\u0439 \u0438\u0437 <a href=\"https:\/\/github.com\/iovisor\/bcc\">bcc<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<h3 id=\"primechaniya\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<blockquote><p>\u042f \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u043b \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b\u00bb \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Linux.<\/p><\/blockquote>\n<p>  <\/p>\n<hr\/>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a: <a href=\"https:\/\/habr.com\/ru\/users\/danaydemenir\/\" class=\"user_link\">DanayDemenir<\/a><br \/>  \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440: <a href=\"https:\/\/habr.com\/ru\/users\/dariarogoz\/\" class=\"user_link\">DariaRogoz<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/580640\/\"> https:\/\/habr.com\/ru\/articles\/580640\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/so\/j3\/si\/soj3siemp60ajusq3pw8pibuky0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/so\/j3\/si\/soj3siemp60ajusq3pw8pibuky0.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u042f \u0434\u0430\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u0435\u0442\u0438 Linux. Linux \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 <a href=\"https:\/\/blog.yadutaf.fr\/2014\/01\/19\/introduction-to-linux-namespaces-part-5-net\/\">\u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d<\/a>. \u041a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 L3, mtr (Matt&#8217;s traceroute) \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0448\u0430\u043d\u0441\u044b \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u0443. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \/ \u043c\u043e\u0441\u0442 \/ \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0441\u0435\u0442\u0438 \/ iptables \u0438 \u043f\u0430\u0440\u0443 \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e tcpdump \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0441\u0435\u0442\u0438, \u0442\u043e \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u043d\u0435\u0439, \u0432\u0430\u0441 \u0436\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0439 \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398176","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398176","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=398176"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398176\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}