{"id":75371,"date":"2020-03-25T19:42:37","date_gmt":"2020-03-25T17:42:37","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf"},"modified":"2020-03-25T19:42:37","modified_gmt":"2020-03-25T17:42:37","slug":"bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf","title":{"rendered":"BPF per i pi\u00f9 piccoli, parte zero: classic BPF","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Berkeley Packet Filters (BPF) \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u043e\u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434. \u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u0431\u0438\u0442\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 BPF. David Miller, \u043c\u0430\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0430 Linux Plumbers 2018 <noindex><a rel=\"nofollow\" href=\"https:\/\/linuxplumbersconf.org\/event\/2\/contributions\/110\/\">\u00abThis talk is not about XDP\u00bb<\/a><\/noindex> (XDP \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f BPF). Brendan Gregg \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u043e\u043a\u043b\u0430\u0434\u044b \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2016-03-05\/linux-bpf-superpowers.html\">Linux BPF Superpowers<\/a><\/noindex>. Toke H\u00f8iland-J\u00f8rgensen <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/ml\/bufferbloat\/87bls8bnsm.fsf@toke.dk\/\">\u0441\u043c\u0435\u0435\u0442\u0441\u044f<\/a><\/noindex>, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u044d\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c microkernel. Thomas Graf \u0440\u0435\u043a\u043b\u0430\u043c\u0438\u0440\u0443\u0435\u0442 \u0438\u0434\u0435\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/presentation\/d\/1AcB4x7JCWET0ysDr0gsX-EIdQSTyBtmi6OAW7bE0jm0\/edit\">BPF \u2014 \u044d\u0442\u043e javascript \u0434\u043b\u044f \u044f\u0434\u0440\u0430<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f BPF, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043e\u0447\u0435\u0440\u0442\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f BPF. \u0412 \u044d\u0442\u043e\u0439, \u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u0441\u0442\u0430\u0442\u044c\u0435 \u0446\u0438\u043a\u043b\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u0439\u043d\u044b \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b <code>tcpdump<\/code>, <code>seccomp<\/code>, <code>strace<\/code>, \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p><\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 BPF \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c Linux, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f BPF \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0441\u0435\u0442\u044f\u043c\u0438 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/eucariot\/\">@eucariot<\/a><\/noindex>, \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u0441\u0435\u0440\u0438\u044e &quot;BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445&quot;, \u0432 \u0447\u0435\u0441\u0442\u044c \u0432\u0435\u043b\u0438\u043a\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/linkmeup.ru\/blog\/11.html\">&quot;\u0421\u0435\u0442\u0438 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445&quot;<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"kratkiy-kurs-istorii-bpfbcb\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043a\u0443\u0440\u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 BPF(<b>c<\/b>)<\/h2>\n<p><\/p>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f BPF \u2014 \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441 \u0442\u0435\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u044b\u043d\u0447\u0435, \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u044b, classic BPF. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <code>tcpdump<\/code>, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <code>seccomp<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_bpf<\/code> \u0434\u043b\u044f <code>iptables<\/code> \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>cls_bpf<\/code>. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c Linux \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b BPF \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443, \u043e\u0434\u043d\u0430\u043a\u043e, \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, API \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0438 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF, \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044f \u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 BPF \u0432 Linux, \u0441\u0442\u0430\u043d\u0435\u0442 \u044f\u0441\u043d\u0435\u0435 \u043a\u0430\u043a \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 BPF.<\/p>\n<p><\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0432\u043e\u0441\u044c\u043c\u0438\u0434\u0435\u0441\u044f\u0442\u044b\u0445 \u0433\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0432\u0435\u043a\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0438\u0437 \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u043e\u0439 Lawrence Berkeley Laboratory \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u0446\u0430 \u0432\u043e\u0441\u044c\u043c\u0438\u0434\u0435\u0441\u044f\u0442\u044b\u0445 \u0433\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0432\u0435\u043a\u0430 \u0436\u0435\u043b\u0435\u0437\u0435. \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 CSPF (CMU\/Stanford Packet Filter), \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435, \u0442.\u0435. \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u044f\u0434\u0440\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u044f\u0434\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u2014 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430.<\/p>\n<p><\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0434\u043b\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0431\u044b\u043b\u0438 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0445 RISC \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435 \u0442\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438\u0437 Berkeley Labs \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f BPF (Berkeley Packet Filters), \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u0430 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 Motorola 6502 \u2014 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043b\u043e\u0448\u0430\u0434\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u043a\u0430\u043a <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Apple_II\">Apple II<\/a><\/noindex> \u0438\u043b\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Nintendo_Entertainment_System\">NES<\/a><\/noindex>. \u041d\u043e\u0432\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p><\/p>\n<h2 id=\"arhitektura-mashiny-bpf\">\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043c\u0430\u0448\u0438\u043d\u044b BPF<\/h2>\n<p><\/p>\n<p>\u041c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u043e-\u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u0435 \u0436\u0435 \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0443 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 <code>A<\/code> \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>X<\/code>, 64 \u0431\u0430\u0439\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 (16 \u0441\u043b\u043e\u0432), \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0431\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0435\u0434, \u0442.\u0435., \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b.<\/p>\n<p><\/p>\n<p>\u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b BPF \u0438, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <em>\u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e<\/em> \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u044f\u0434\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430), \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a <em>\u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e<\/em> \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u044f\u0434\u0440\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443). \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u044f\u0434\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0435), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <em>\u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e<\/em> \u0440\u0435\u0433\u0438\u043e\u043d\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f\u0434\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430).<\/p>\n<p><\/p>\n<p>\u0421\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b: \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u0432\u0441\u0435 \u0435\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/papers\/bpf-usenix93.pdf\">The BSD Packet Filter<\/a><\/noindex> \u0438\/\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0444\u0430\u0439\u043b\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc5\/Documentation\/networking\/filter.txt\">Documentation\/networking\/filter.txt<\/a><\/noindex> \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e <noindex><a rel=\"nofollow\" href=\"https:\/\/sharkfestus.wireshark.org\/sharkfest.11\/presentations\/McCanne-Sharkfest&#039;11_Keynote_Address.pdf\"><code>libpcap<\/code>: An Architecture and Optimization Methodology for Packet Capture<\/a><\/noindex>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 McCanne, \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 BPF, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>libpcap<\/code>.<\/p>\n<p><\/p>\n<p>\u041c\u044b \u0436\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF \u0432 Linux: <code>tcpdump<\/code> (<code>libpcap<\/code>), seccomp, <code>xt_bpf<\/code>, <code>cls_bpf<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"tcpdump\">tcpdump<\/h2>\n<p><\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 BPF \u0432\u0435\u043b\u0430\u0441\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u2014 \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>tcpdump<\/code>. \u0418, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u0441\u0430\u043c\u044b\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0441 \u043d\u0435\u0433\u043e \u043c\u044b \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p><\/p>\n<p>(\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430 Linux <code>5.6.0-rc6<\/code>. \u0412\u044b\u0432\u043e\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.)<\/p>\n<p><\/p>\n<h3 id=\"primer-nablyudaem-ipv6-pakety\">\u041f\u0440\u0438\u043c\u0435\u0440: \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c IPv6 \u043f\u0430\u043a\u0435\u0442\u044b<\/h3>\n<p><\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 IPv6 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 <code>eth0<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>tcpdump<\/code> \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c <code>ip6<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo tcpdump -i eth0 ip6<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>tcpdump<\/code> \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 <code>ip6<\/code> \u0432 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b BPF \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u0435\u0433\u043e \u0432 \u044f\u0434\u0440\u043e (\u0441\u043c. \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <noindex><a rel=\"nofollow\" href=\"#tcpdump-\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\">Tcpdump: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/a><\/noindex>). \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>eth0<\/code>. \u0415\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>n<\/code>, \u0442\u043e \u0434\u043e <code>n<\/code> \u0431\u0430\u0439\u0442\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0435\u0433\u043e \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 <code>tcpdump<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0447\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f: classic BPF\" src=\"\/wp-content\/uploads\/2020\/03\/f727dd3a9e51980460c61e2dae657bd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0432 \u044f\u0434\u0440\u043e <code>tcpdump<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0430\u043c\u043e\u0433\u043e <code>tcpdump<\/code>, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 <code>-d<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo tcpdump -i eth0 -d ip6\n(000) ldh      [12]\n(001) jeq      #0x86dd          jt 2    jf 3\n(002) ret      #262144\n(003) ret      #0<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ldh [12]<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u00ab\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>A<\/code> \u043f\u043e\u043b-\u0441\u043b\u043e\u0432\u0430 (16 \u0431\u0438\u0442), \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 12\u00bb \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u044d\u0442\u043e \u0447\u0442\u043e \u0437\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c? \u041e\u0442\u0432\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>x<\/code> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f <code>(x+1)<\/code>-\u0439 \u0431\u0430\u0439\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041c\u044b \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u044b \u0441 Ethernet \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <code>eth0<\/code>, \u0430 \u044d\u0442\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Ethernet_frame\">\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442<\/a><\/noindex>, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u043d\u0435\u0442 VLAN \u0442\u044d\u0433\u043e\u0432):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">       6              6          2\n|Destination MAC|Source MAC|Ether Type|...|<\/code><\/pre>\n<p><\/p>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>ldh [12]<\/code> \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <code>A<\/code> \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 <code>Ether Type<\/code> \u2014 \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c Ethernet-\u0444\u0440\u0435\u0439\u043c\u0435 \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 1 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <code>A<\/code> (\u0442\u0438\u043f \u043f\u0430\u043a\u0435\u0442\u0430) c <code>0x86dd<\/code>, \u0430 \u044d\u0442\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc4\/include\/uapi\/linux\/if_ether.h#L74\">\u0438 \u0435\u0441\u0442\u044c<\/a><\/noindex> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u0442\u0438\u043f IPv6. \u041d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 1 \u043a\u0440\u043e\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0434\u0432\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u2014 <code>jt 2<\/code> \u0438 <code>jf 3<\/code> \u2014 \u043c\u0435\u0442\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (<code>A == 0x86dd<\/code>) \u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e. \u0418\u0442\u0430\u043a, \u0432 \u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (IPv6) \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 2, \u0430 \u0432 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u2014 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 3. \u041d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 3 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c 0 (\u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0439 \u043f\u0430\u043a\u0435\u0442), \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 2 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c 262144 (\u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439 \u043c\u043d\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 256 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430).<\/p>\n<p><\/p>\n<h3 id=\"primer-poslozhnee-smotrim-na-tcp-pakety-po-portu-naznacheniya\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 TCP \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e \u043f\u043e\u0440\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 TCP \u043f\u0430\u043a\u0435\u0442\u044b \u0441 \u043f\u043e\u0440\u0442\u043e\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 666. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439 IPv4, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439 IPv6 \u043f\u0440\u043e\u0449\u0435. \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f IPv6 (<code>ip6 and tcp dst port 666<\/code>) \u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f (<code>tcp dst port 666<\/code>). \u0418\u0442\u0430\u043a, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo tcpdump -i eth0 -d ip and tcp dst port 666\n(000) ldh      [12]\n(001) jeq      #0x800           jt 2    jf 10\n(002) ldb      [23]\n(003) jeq      #0x6             jt 4    jf 10\n(004) ldh      [20]\n(005) jset     #0x1fff          jt 10   jf 6\n(006) ldxb     4*([14]&amp;0xf)\n(007) ldh      [x + 16]\n(008) jeq      #0x29a           jt 9    jf 10\n(009) ret      #262144\n(010) ret      #0<\/code><\/pre>\n<p><\/p>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 0 \u0438 1 \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c. \u041d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 2 \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u043e IPv4 \u043f\u0430\u043a\u0435\u0442 (Ether Type = <code>0x800<\/code>) \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>A<\/code> 24-\u0439 \u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430\u0448 \u043f\u0430\u043a\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">       14            8      1     1\n|ethernet header|ip fields|ttl|protocol|...|<\/code><\/pre>\n<p><\/p>\n<p>\u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>A<\/code> \u043f\u043e\u043b\u0435 Protocol \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IP, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0432\u0435\u0434\u044c \u043c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e TCP \u043f\u0430\u043a\u0435\u0442\u044b. \u041c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c Protocol \u0441 <code>0x6<\/code> (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc4\/include\/uapi\/linux\/in.h#L38\"><code>IPPROTO_TCP<\/code><\/a><\/noindex>) \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 3.<\/p>\n<p><\/p>\n<p>\u041d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 4 \u0438 5 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u043b\u0441\u043b\u043e\u0432\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 20, \u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>jset<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0435\u0445 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/IPv4#Flags\">\u0444\u043b\u0430\u0433\u043e\u0432<\/a><\/noindex> \u2014 \u0432 \u043c\u0430\u0441\u043a\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0439 <code>jset<\/code> \u043e\u0447\u0438\u0449\u0435\u043d\u044b \u0442\u0440\u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u0430. \u0414\u0432\u0430 \u0431\u0438\u0442\u0430 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043d\u0430\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u0447\u0430\u0441\u0442\u044c\u044e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e IP \u043f\u0430\u043a\u0435\u0442\u0430, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c. \u0422\u0440\u0435\u0442\u0438\u0439 \u0431\u0438\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u041c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0438 \u043d\u0435\u0446\u0435\u043b\u044b\u0435 \u043d\u0438 \u0431\u0438\u0442\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0438 \u0431\u0438\u0442\u0430.<\/p>\n<p><\/p>\n<p>\u0421\u0442\u0440\u043e\u0447\u043a\u0430 6 \u2014 \u0441\u0430\u043c\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432 \u044d\u0442\u043e\u043c \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>ldxb 4*([14]&amp;0xf)<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>X<\/code> \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u0430 \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 4. \u0427\u0435\u0442\u044b\u0440\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u0430 \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/IPv4#IHL\">Internet Header Length<\/a><\/noindex> \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IPv4, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 4. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>4*([14]&amp;0xf)<\/code> \u2014 \u044d\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <code>X<\/code>, \u0442.\u0435. \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0438 <code>ldb 4*([14]&amp;0xf)<\/code> \u043d\u0438 <code>ldxb 5*([14]&amp;0xf)<\/code> (\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 offset, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>ldxb 4*([16]&amp;0xf)<\/code>). \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 BPF \u0440\u043e\u0432\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432 <code>X<\/code> (\u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440) \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IPv4.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 7 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u043b-\u0441\u043b\u043e\u0432\u0430, \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>(X+16)<\/code>. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0432, \u0447\u0442\u043e 14 \u0431\u0430\u0439\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a Ethernet, \u0430 <code>X<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IPv4, \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 <code>A<\/code> \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f TCP:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">       14           X           2             2\n|ethernet header|ip header|source port|destination port|<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 8 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043a\u043e\u043c\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 9 \u0438\u043b\u0438 10 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p><\/p>\n<h3 id=\"tcpdump-zagruzka\">Tcpdump: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/h3>\n<p><\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430 \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c BPF \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0432 \u044f\u0434\u0440\u043e \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <code>tcpdump<\/code> \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/the-tcpdump-group\/tcpdump\"><code>tcpdump<\/code><\/a><\/noindex> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/the-tcpdump-group\/libpcap\"><code>libpcap<\/code><\/a><\/noindex>. \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0430\u0434\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>libpcap<\/code>, \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><\/p>\n<ul>\n<li>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 <code>pcap_t<\/code> \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/manpages\/pcap_create.3pcap.html\"><code>pcap_create<\/code><\/a><\/noindex>,<\/li>\n<li>\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/manpages\/pcap_activate.3pcap.html\"><code>pcap_activate<\/code><\/a><\/noindex>,<\/li>\n<li>\u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/manpages\/pcap_compile.3pcap.html\"><code>pcap_compile<\/code><\/a><\/noindex>,<\/li>\n<li>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/manpages\/pcap_setfilter.3pcap.html\"><code>pcap_setfilter<\/code><\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>pcap_setfilter<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 Linux, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>strace<\/code> (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo strace -f -e trace=%network tcpdump -p -i eth0 ip\nsocket(AF_PACKET, SOCK_RAW, 768)        = 3\nbind(3, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex(&quot;eth0&quot;), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 20) = 0\nsetsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=4, filter=0xb00bb00bb00b}, 16) = 0\n...<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 \u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/packet.7.html\">raw \u0441\u043e\u043a\u0435\u0442<\/a><\/noindex> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 Ethernet \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 <code>eth0<\/code>. \u0418\u0437 <noindex><a rel=\"nofollow\" href=\"#\u043f\u0440\u0438\u043c\u0435\u0440-\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c-ipv6-\u043f\u0430\u043a\u0435\u0442\u044b\">\u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/a><\/noindex> \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 <code>ip<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 BPF \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0438 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/socket.7.html\"><code>SO_ATTACH_FILTER<\/code><\/a><\/noindex> \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>setsockopt<\/code> \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u0438\u043d\u044b 4. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448 \u0444\u0438\u043b\u044c\u0442\u0440.<\/p>\n<p><\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c BPF \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0430 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 BPF \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0435\u0435 \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\n<b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u0430\u044f \u043f\u0440\u0430\u0432\u0434\u0430<\/b><\/p>\n<p>\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo strace -f -e trace=%network tcpdump -p -i eth0 ip\nsocket(AF_PACKET, SOCK_RAW, 768)        = 3\nbind(3, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex(&quot;eth0&quot;), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 20) = 0\nsetsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=1, filter=0xbeefbeefbeef}, 16) = 0\nrecvfrom(3, 0x7ffcad394257, 1, MSG_TRUNC, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)\nsetsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, {len=4, filter=0xb00bb00bb00b}, 16) = 0\n...<\/code><\/pre>\n<p><\/p>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043a \u0441\u043e\u043a\u0435\u0442\u0443 \u043d\u0430\u0448 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 5, \u043d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 3 \u0438 4? \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u044d\u0442\u043e <code>libpcap<\/code> \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u043d\u0430\u0441 \u2014 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u044b, \u0435\u043c\u0443 \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/the-tcpdump-group\/libpcap\/blob\/libpcap-1.9.1\/pcap-linux.c#L7393\">\u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442<\/a><\/noindex> \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 <code>ret #0<\/code> (\u0434\u0440\u043e\u043f\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b), \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u043a\u0435\u0442 \u0432 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 Linux \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 <code>struct sock_fprog<\/code> \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0441\u043e\u043a\u0435\u0442, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a \u0441\u043e\u043a\u0435\u0442\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>setsockopt<\/code>.<\/p>\n<p><\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0441\u043e\u043a\u0435\u0442\u0443, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a raw. \u0412\u043e\u0442 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aspsk\/c-examples\/blob\/master\/so_attach_filter_udp\/so_attach_filter_udp.c\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/noindex> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442 \u0432\u0441\u0435, \u043a\u0440\u043e\u043c\u0435 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u0443 \u0432\u0441\u0435\u0445 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 UDP \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c. (\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043e\u0434\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e.)<\/p>\n<p><\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>setsockopt<\/code> \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0441\u043c. \u0432 <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/socket.7.html\">socket(7)<\/a><\/noindex>, \u0430 \u043f\u0440\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432\u0438\u0434\u0430 <code>struct sock_fprog<\/code> \u0431\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u0438 <code>tcpdump<\/code> \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <noindex><a rel=\"nofollow\" href=\"#\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c-bpf-\u043f\u0440\u0438-\u043f\u043e\u043c\u043e\u0449\u0438-\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445-\u0440\u0443\u043a\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c BPF \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u0443\u043a<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"klassicheskiy-bpf-i-xxi-vek\">\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 BPF \u0438 XXI \u0432\u0435\u043a<\/h2>\n<p><\/p>\n<p>BPF \u0431\u044b\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432 Linux \u0432 1997 \u0433\u043e\u0434\u0443 \u0438 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043b\u043e\u0448\u0430\u0434\u043a\u043e\u0439 <code>libpcap<\/code> \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (Linux-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc5\/Documentation\/networking\/filter.txt#L268\">\u0431\u044b\u043b\u0438<\/a><\/noindex>, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b). \u041f\u0435\u0440\u0432\u044b\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e BPF \u0431\u0443\u0434\u0435\u0442 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0432 2011 \u0433\u043e\u0434\u0443, \u043a\u043e\u0433\u0434\u0430 Eric Dumazet \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/437884\/\">\u043f\u0430\u0442\u0447<\/a><\/noindex>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0432 \u044f\u0434\u0440\u043e Just In Time Compiler \u2014 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 BPF \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 <code>x86_64<\/code> \u043a\u043e\u0434.<\/p>\n<p><\/p>\n<p>JIT compiler \u0431\u044b\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0432 2012 \u0433\u043e\u0434\u0443 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/commit\/e2cfabdfd075648216f99c2c03821cf3f47c1727\">\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c<\/a><\/noindex> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/656307\/\">seccomp<\/a><\/noindex>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f BPF, \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 2013 \u0431\u044b\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/commit\/e6f30c731718db45cec380964dfee210307cfc4a\">\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d<\/a><\/noindex> \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_bpf<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f <code>iptables<\/code> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 BPF, \u0430 \u0432 \u043e\u043a\u0442\u044f\u0431\u0440\u0435 2013 \u0431\u044b\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/commit\/7d1d65cb84e1cfacba3f54c5934194785259e0d8\">\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d<\/a><\/noindex> \u0435\u0449\u0435 \u0438 \u043c\u043e\u0434\u0443\u043b\u044c <code>cls_bpf<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 BPF \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<p><\/p>\n<p>\u041c\u044b \u0441\u043a\u043e\u0440\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f BPF, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <code>libpcap<\/code> \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b (\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0444\u0438\u043b\u044c\u0442\u0440, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>libpcap<\/code> \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 0 \u0438\u043b\u0438 0x40000) \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 seccomp, \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b.<\/p>\n<p><\/p>\n<h2 id=\"programmiruem-bpf-pri-pomoschi-sobstvennyh-ruk\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c BPF \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u0443\u043a<\/h2>\n<p><\/p>\n<p>\u041f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 BPF, \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">   16    8    8     32\n| code | jt | jf |  k  |<\/code><\/pre>\n<p><\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 64 \u0431\u0438\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0435 16 \u0431\u0438\u0442 \u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u0442\u043e\u043c \u0438\u0434\u0443\u0442 \u0434\u0432\u0430 \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0438\u0442\u043d\u044b\u0445 \u043e\u0442\u0441\u0442\u0443\u043f\u0430, <code>jt<\/code> \u0438 <code>jf<\/code>, \u0438 32 \u0431\u0438\u0442\u0430 \u0434\u043b\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <code>K<\/code>, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>ret<\/code>, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u0434 <code>6<\/code>, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <code>K<\/code>. \u041d\u0430 \u044f\u0437\u044b\u043a\u0435 C \u043e\u0434\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f BPF \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">struct sock_filter {\n        __u16   code;\n        __u8    jt;\n        __u8    jf;\n        __u32   k;\n}<\/code><\/pre>\n<p><\/p>\n<p>\u0430 \u0446\u0435\u043b\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u2014 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">struct sock_fprog {\n        unsigned short len;\n        struct sock_filter *filter;\n}<\/code><\/pre>\n<p><\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u043a\u043e\u0434\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043c\u044b, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0437\u043d\u0430\u0435\u043c \u0438\u0437 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/papers\/bpf-usenix93.pdf\">[1]<\/a><\/noindex>). \u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 <code>ip6<\/code> \u0438\u0437 <noindex><a rel=\"nofollow\" href=\"#\u043f\u0440\u0438\u043c\u0435\u0440-\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c-ipv6-\u043f\u0430\u043a\u0435\u0442\u044b\">\u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">struct sock_filter code[] = {\n        { 0x28, 0, 0, 0x0000000c },\n        { 0x15, 0, 1, 0x000086dd },\n        { 0x06, 0, 0, 0x00040000 },\n        { 0x06, 0, 0, 0x00000000 },\n};\nstruct sock_fprog prog = {\n        .len = ARRAY_SIZE(code),\n        .filter = code,\n};<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>prog<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432\u0435<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">setsockopt(sk, SOL_SOCKET, SO_ATTACH_FILTER, &amp;prog, sizeof(prog))<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438 \u0442.\u043f.). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>&lt;linux\/filter.h&gt;<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u044b-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u0438 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">struct sock_filter code[] = {\n        BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 12),\n        BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, ETH_P_IPV6, 0, 1),\n        BPF_STMT(BPF_RET|BPF_K, 0x00040000),\n        BPF_STMT(BPF_RET|BPF_K, 0),\n}<\/code><\/pre>\n<p><\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0443\u0434\u043e\u0431\u0435\u043d. \u0422\u0430\u043a \u0440\u0430\u0441\u0441\u0443\u0434\u0438\u043b\u0438 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u044f\u0434\u0440\u0430 Linux \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/tree\/v5.6-rc5\/tools\/bpf\"><code>tools\/bpf<\/code><\/a><\/noindex> \u044f\u0434\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0438 \u0434\u0435\u0431\u0430\u0433\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c BPF.<\/p>\n<p><\/p>\n<p>\u042f\u0437\u044b\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 <code>tcpdump<\/code>, \u043d\u043e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0440\u043e\u043f\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 TCP\/IPv4:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cat \/tmp\/tcp-over-ipv4.bpf\nldh [12]\njne #0x800, drop\nldb [23]\njneq #6, drop\nret #-1\ndrop: ret #0<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>&lt;\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&gt;,&lt;code1&gt; &lt;jt1&gt; &lt;jf1&gt; &lt;k1&gt;,...<\/code>, \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 TCP \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ tools\/bpf\/bpf_asm \/tmp\/tcp-over-ipv4.bpf\n6,40 0 0 12,21 0 3 2048,48 0 0 23,21 0 1 6,6 0 0 4294967295,6 0 0 0,<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 C \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ tools\/bpf\/bpf_asm -c \/tmp\/tcp-over-ipv4.bpf\n{ 0x28,  0,  0, 0x0000000c },\n{ 0x15,  0,  3, 0x00000800 },\n{ 0x30,  0,  0, 0x00000017 },\n{ 0x15,  0,  1, 0x00000006 },\n{ 0x06,  0,  0, 0xffffffff },\n{ 0x06,  0,  0, 0000000000 },<\/code><\/pre>\n<p><\/p>\n<p>\u042d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430 <code>struct sock_filter<\/code>, \u043a\u0430\u043a \u043c\u044b \u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430.<\/p>\n<p><\/p>\n<h3 id=\"rasshireniya-linux-i-netsniff-ng\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Linux \u0438 netsniff-ng<\/h3>\n<p><\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 BPF, Linux \u0438 <code>tools\/bpf\/bpf_asm<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc5\/Documentation\/networking\/filter.txt#L268\">\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440<\/a><\/noindex>. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u043b\u044f\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>struct sk_buff<\/code>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u0432 \u044f\u0434\u0440\u0435. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u0442\u044c \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>ldw cpu<\/code> \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>A<\/code> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 <code>raw_smp_processor_id()<\/code>. (\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 BPF \u044d\u0442\u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c \u043d\u0430\u0431\u043e\u0440\u0430 kernel helpers \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c, \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.) \u0412\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>poff<\/code>, payload offset:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ld poff\nret a<\/code><\/pre>\n<p><\/p>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f BPF \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 <code>tcpdump<\/code>, \u043d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043e\u0432\u043e\u0434 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0430\u043a\u0435\u0442\u043e\u043c \u0443\u0442\u0438\u043b\u0438\u0442 <noindex><a rel=\"nofollow\" href=\"http:\/\/netsniff-ng.org\/\"><code>netsniff-ng<\/code><\/a><\/noindex>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>netsniff-ng<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a\u0440\u043e\u043c\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 BPF \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439, \u0447\u0435\u043c <code>tools\/bpf\/bpf_asm<\/code>, \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 BPF \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>bpfc<\/code>. \u041f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0441\u043c. \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><\/p>\n<h2 id=\"seccomp\">seccomp<\/h2>\n<p><\/p>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f seccomp, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 BPF \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c.<\/p>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f seccomp \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u044f\u0434\u0440\u043e \u0432 2005 \u0433\u043e\u0434\u0443 \u0438 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u043b\u0438\u0448\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c: <code>read<\/code>, <code>write<\/code>, <code>exit<\/code> \u0438 <code>sigreturn<\/code>, \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0430\u0440\u0443\u0448\u0438\u0432\u0448\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0443\u0431\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>SIGKILL<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 2012 \u0433\u043e\u0434\u0443 \u0432 seccomp \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c BPF \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u0434 \u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. (\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u043b\u0441\u044f Chrome, \u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043b\u044e\u0434\u044c\u043c\u0438 \u0438\u0437 Chrome \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c KRSI, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 BPF \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c Linux Security Modules.) \u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><\/p>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 seccomp, \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0443-\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0434\u043e (\u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e) \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/322046\/\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c: seccomp<\/a><\/noindex> \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f seccomp, \u043a\u0430\u043a \u0432\u0435\u0440\u0441\u0438\u0438 2007 \u0433\u043e\u0434\u0430, \u0442\u0430\u043a \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c BPF (\u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 libseccomp), \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e \u0441\u0432\u044f\u0437\u044c seccomp \u0441 Docker, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/270165\/\">\u0418\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u0435\u043c\u043e\u043d\u044b \u0441 systemd \u0438\u043b\u0438 \u00ab\u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d Docker \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e!\u00bb<\/a><\/noindex> \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u043d\u044b\u0435 \u0438\u043b\u0438 \u0431\u0435\u043b\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c systemd.<\/p>\n<p><\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f <code>seccomp<\/code> \u043d\u0430 \u0433\u043e\u043b\u043e\u043c C \u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>libseccomp<\/code> \u0438 \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u0435\u0441\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u0430 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a seccomp \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 <code>strace<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"pishem-i-zagruzhaem-filtry-dlya-seccomp\">\u041f\u0438\u0448\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f seccomp<\/h3>\n<p><\/p>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 seccomp. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/seccomp.2.html\"><code>seccomp(2)<\/code><\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">seccomp(SECCOMP_SET_MODE_FILTER, flags, &amp;filter)<\/code><\/pre>\n<p><\/p>\n<p>\u0433\u0434\u0435 <code>&amp;filter<\/code> \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u043d\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>struct sock_fprog<\/code>, \u0442.\u0435. \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 BPF.<\/p>\n<p><\/p>\n<p>\u0427\u0435\u043c \u0436\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f seccomp \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f \u0441\u043e\u043a\u0435\u0442\u043e\u0432? \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u043a\u0435\u0442\u043e\u0432, \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043f\u0430\u043a\u0435\u0442, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 seccomp \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0438\u0434\u0430<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">struct seccomp_data {\n    int   nr;\n    __u32 arch;\n    __u64 instruction_pointer;\n    __u64 args[6];\n};<\/code><\/pre>\n<p><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c <code>nr<\/code> \u2014 \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, <code>arch<\/code> \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435), <code>args<\/code> \u2014 \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u0430 <code>instruction_pointer<\/code> \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>A<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ldw [0]<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c seccomp \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e 32-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044e \u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043e\u043b-\u0441\u043b\u043e\u0432\u0430 \u0438\u043b\u0438 \u0431\u0430\u0439\u0442 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 <code>ldh [0]<\/code> \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <code>seccomp<\/code> \u0432\u0435\u0440\u043d\u0435\u0442 <code>EINVAL<\/code>. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc4\/kernel\/seccomp.c#L164\"><code>seccomp_check_filter()<\/code><\/a><\/noindex> \u044f\u0434\u0440\u0430. (\u0418\u0437 \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e, \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c seccomp, \u0432 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>mod<\/code> (\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f) \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f seccomp BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/lore.kernel.org\/lkml\/201908121035.06695C79F@keescook\/\">\u0441\u043b\u043e\u043c\u0430\u0435\u0442<\/a><\/noindex> ABI.)<\/p>\n<p><\/p>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0447\u0438\u0442\u0430\u0442\u044c seccomp \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0431\u044b\u0447\u043d\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043a\u0430\u043a \u0431\u0435\u043b\u044b\u0439 \u0438\u043b\u0438 \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ld [0]\njeq #304, bad\njeq #176, bad\njeq #239, bad\njeq #279, bad\ngood: ret #0x7fff0000 \/* SECCOMP_RET_ALLOW *\/\nbad: ret #0<\/code><\/pre>\n<p><\/p>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 304, 176, 239, 279. \u0427\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b? \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0438\u0441\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u0440\u044b seccomp <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/656307\/\">\u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442<\/a><\/noindex> \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b (\u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043a\u0430\u043a \u043f\u043e\u043b\u0435 <code>arch<\/code> \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>struct seccomp_data<\/code>). \u0421 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u043a\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ld [4]\njne #0xc000003e, bad_arch ; SCMP_ARCH_X86_64<\/code><\/pre>\n<p><\/p>\n<p>\u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0448\u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><\/p>\n<h3 id=\"pishem-i-zagruzhaem-filtry-dlya-seccomp-pri-pomoschi-libseccomp\">\u041f\u0438\u0448\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f seccomp \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>libseccomp<\/code><\/h3>\n<p><\/p>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u0430\u0445 \u0438\u043b\u0438 \u0434\u043b\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 BPF \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438\u043c\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u044b\u0439 \u0438\/\u0438\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/seccomp\/libseccomp\">libseccomp<\/a><\/noindex>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u043d\u044b\u0445 \u0438\u043b\u0438 \u0431\u0435\u043b\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u0437 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/270165\/\">\u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/noindex> (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aspsk\/c-examples\/tree\/master\/seccomp_filter\">\u0442\u0443\u0442<\/a><\/noindex>):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">#include &lt;seccomp.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;err.h&gt;\n\nstatic int sys_numbers[] = {\n        __NR_mount,\n        __NR_umount2,\n       \/\/ ... \u0435\u0449\u0435 40 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 ...\n        __NR_vmsplice,\n        __NR_perf_event_open,\n};\n\nint main(int argc, char **argv)\n{\n        scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW);\n\n        for (size_t i = 0; i &lt; sizeof(sys_numbers)\/sizeof(sys_numbers[0]); i++)\n                seccomp_rule_add(ctx, SCMP_ACT_TRAP, sys_numbers[i], 0);\n\n        seccomp_load(ctx);\n\n        execvp(argv[1], &amp;argv[1]);\n        err(1, &quot;execlp: %s&quot;, argv[1]);\n}<\/code><\/pre>\n<p><\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 <code>sys_numbers<\/code> \u0438\u0437 40+ \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u0417\u0430\u0442\u0435\u043c, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <code>ctx<\/code> \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c (<code>SCMP_ACT_ALLOW<\/code>) \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0447\u0435\u0440\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u0449\u0435). \u0417\u0430\u0442\u0435\u043c, \u043e\u0434\u0438\u043d \u0437\u0430 \u043e\u0434\u043d\u0438\u043c, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438\u0437 \u0447\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c <code>SCMP_ACT_TRAP<\/code>, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 seccomp \u043f\u043e\u0448\u043b\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441\u0438\u0433\u043d\u0430\u043b <code>SIGSYS<\/code> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0440\u0443\u0448\u0438\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u044f\u0434\u0440\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>seccomp_load<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442 \u0435\u0435 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>seccomp(2)<\/code>.<\/p>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <code>libseccomp<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cc -std=c17 -Wall -Wextra -c -o seccomp_lib.o seccomp_lib.c\ncc -o seccomp_lib seccomp_lib.o -lseccomp<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ .\/seccomp_lib echo ok\nok<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo .\/seccomp_lib mount -t bpf bpf \/tmp\nBad system call<\/code><\/pre>\n<p><\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>strace<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo strace -e seccomp .\/seccomp_lib mount -t bpf bpf \/tmp\nseccomp(SECCOMP_SET_MODE_FILTER, 0, {len=50, filter=0x55d8e78428e0}) = 0\n--- SIGSYS {si_signo=SIGSYS, si_code=SYS_SECCOMP, si_call_addr=0xboobdeadbeef, si_syscall=__NR_mount, si_arch=AUDIT_ARCH_X86_64} ---\n+++ killed by SIGSYS (core dumped) +++\nBad system call<\/code><\/pre>\n<p><\/p>\n<p>\u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0438\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>mount(2)<\/code>.<\/p>\n<p><\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>libseccomp<\/code>, \u0443\u043c\u0435\u0441\u0442\u0438\u0432 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432 libseccomp \u0431\u044b\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/seccomp\/libseccomp\/commit\/a3732b32b8e67a5c466a625f0e1e0d0bfde5ee0b\">\u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u0430\u0442\u0447<\/a><\/noindex>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <code>SCMP_FLTATR_CTL_OPTIMIZE<\/code>. \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0440\u0430\u0432\u043d\u044b\u043c 2, \u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u0442\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/aspsk\/ed954028788799760151f212b226a35d\">\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442<\/a><\/noindex>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 BPF \u043f\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ echo 1 3 6 8 13 | .\/generate_bin_search_bpf.py\nld [0]\njeq #6, bad\njgt #6, check8\njeq #1, bad\njeq #3, bad\nret #0x7fff0000\ncheck8:\njeq #8, bad\njeq #13, bad\nret #0x7fff0000\nbad: ret #0<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b BPF \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u0443 (\u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>jmp A<\/code> \u0438\u043b\u0438 <code>jmp [label+X]<\/code>) \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435.<\/p>\n<p><\/p>\n<h3 id=\"seccomp-i-strace\">seccomp \u0438 strace<\/h3>\n<p><\/p>\n<p>\u0412\u0441\u0435 \u0437\u043d\u0430\u044e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <code>strace<\/code> \u2014 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430 Linux. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u043b\u044b\u0448\u0430\u043d\u044b \u043f\u0440\u043e <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2014-05-11\/strace-wow-much-syscall.html\">\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e<\/a><\/noindex> \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>strace<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>ptrace(2)<\/code>, \u0430 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0442.\u0435., \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ time strace du \/usr\/share\/ &gt;\/dev\/null 2&gt;&amp;1\n\nreal    0m3.081s\nuser    0m0.531s\nsys     0m2.073s<\/code><\/pre>\n<p><\/p>\n<p>\u0438<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ time strace -e open du \/usr\/share\/ &gt;\/dev\/null 2&gt;&amp;1\n\nreal    0m2.404s\nuser    0m0.193s\nsys     0m1.800s<\/code><\/pre>\n<p><\/p>\n<p>\u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0445\u043e\u0442\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0442\u0440\u0435\u0439\u0441\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u041d\u043e\u0432\u0430\u044f \u043e\u043f\u0446\u0438\u044f <code>--seccomp-bpf<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 <code>strace<\/code> \u0432\u0435\u0440\u0441\u0438\u0438 5.3, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0438 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0434 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0443\u0436\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ time strace --seccomp-bpf -e open du \/usr\/share\/ &gt;\/dev\/null 2&gt;&amp;1\n\nreal    0m0.148s\nuser    0m0.017s\nsys     0m0.131s\n\n$ time du \/usr\/share\/ &gt;\/dev\/null 2&gt;&amp;1\n\nreal    0m0.140s\nuser    0m0.024s\nsys     0m0.116s<\/code><\/pre>\n<p><\/p>\n<p>(\u0422\u0443\u0442, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u043c\u0430\u043d \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0442\u0440\u0435\u0439\u0441\u0438\u043c \u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0442\u0440\u0435\u0439\u0441\u0438\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>newfsstat<\/code>, \u0442\u043e <code>strace<\/code> \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u043b \u0431\u044b \u0442\u0430\u043a \u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0438 \u0431\u0435\u0437 <code>--seccomp-bpf<\/code>.)<\/p>\n<p><\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f? \u0411\u0435\u0437 \u043d\u0435\u0435 <code>strace<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PTRACE_SYSCALL<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 (\u043b\u044e\u0431\u043e\u0439) \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f <code>strace<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PTRACE_SYSCALL<\/code>. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438 \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f <code>strace<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PTRACE_SYSCALL<\/code>, \u0438 \u0442.\u043f.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0447\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f: classic BPF\" src=\"\/wp-content\/uploads\/2020\/03\/a7cebbf7c204c51c1f786b98a6ab52af.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 seccomp, \u043e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b. \u0418\u043c\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <code>X<\/code>, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c BPF \u0444\u0438\u043b\u044c\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f <code>X<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>SECCOMP_RET_TRACE<\/code>, \u0430 \u0434\u043b\u044f \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u2014 <code>SECCOMP_RET_ALLOW<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ld [0]\njneq #X, ignore\ntrace: ret #0x7ff00000\nignore: ret #0x7fff0000<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>strace<\/code> \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0430\u043a <code>PTRACE_CONT<\/code>, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 <code>X<\/code>, \u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e <code>X<\/code>, \u0442\u043e seccomp \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>strace<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0430\u043a <code>PTRACE_SYSCALL<\/code> (\u0442\u0430\u043a \u043a\u0430\u043a \u0432 seccomp \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430). \u041a\u043e\u0433\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f, <code>strace<\/code> \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PTRACE_CONT<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442 seccomp.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0447\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f: classic BPF\" src=\"\/wp-content\/uploads\/2020\/03\/3f212a66a2bec722f44d5a97a8beec33.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u043f\u0446\u0438\u0438 <code>--seccomp-bpf<\/code> \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 (\u043e\u043f\u0446\u0438\u044f <code>-p<\/code> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <code>strace<\/code>), \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f seccomp. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <em>\u043d\u0435<\/em> \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0442\u0430\u043a \u043a\u0430\u043a seccomp \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e.<\/p>\n<p><\/p>\n<p>\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e <code>strace<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <code>seccomp<\/code> \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437 <noindex><a rel=\"nofollow\" href=\"https:\/\/fosdem.org\/2020\/schedule\/event\/debugging_strace_bpf\/\">\u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430<\/a><\/noindex>. \u0414\u043b\u044f \u043d\u0430\u0441 \u0436\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0444\u0430\u043a\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 BPF \u0432 \u043b\u0438\u0446\u0435 seccomp \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440.<\/p>\n<p><\/p>\n<h2 id=\"xt_bpf\"><code>xt_bpf<\/code><\/h2>\n<p><\/p>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u043c\u0441\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043c\u0438\u0440 \u0441\u0435\u0442\u0435\u0439.<\/p>\n<p><\/p>\n<p>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f: \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e, \u0432 2007 \u0433\u043e\u0434\u0443, \u0432 \u044f\u0434\u0440\u043e \u0431\u044b\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/commit\/1b50b8a371e90a5e110f466e4ac02cf6b5f681de\">\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d<\/a><\/noindex> \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_u32<\/code> \u0434\u043b\u044f netfilter. \u041e\u043d \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u0440\u0435\u0432\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 <code>cls_u32<\/code> \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f iptables \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439: \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c 32 \u0431\u0438\u0442\u0430 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043d\u0430\u0431\u043e\u0440 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">sudo iptables -A INPUT -m u32 --u32 &quot;6&amp;0xFF=1&quot; -j LOG --log-prefix &quot;seen-by-xt_u32&quot;<\/code><\/pre>\n<p><\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 32 \u0431\u0438\u0442\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IP, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u0430 6, \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043a \u043d\u0438\u043c \u043c\u0430\u0441\u043a\u0443 <code>0xFF<\/code> (\u0432\u0437\u044f\u0442\u044c \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442). \u042d\u0442\u043e \u2014 \u043f\u043e\u043b\u0435 <code>protocol<\/code> \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IP \u0438 \u043c\u044b \u0435\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 1 (ICMP). \u0412 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0430 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>@<\/code> \u2014 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 X \u0431\u0430\u0439\u0442 \u0432\u043f\u0440\u0430\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0430\u0432\u0438\u043b\u043e<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">iptables -m u32 --u32 &quot;6&amp;0xFF=0x6 &amp;&amp; 0&gt;&gt;22&amp;0x3C@4=0x29&quot;<\/code><\/pre>\n<p><\/p>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043b\u0438 TCP Sequence Number <code>0x29<\/code>. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0436\u0435 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudflare.com\/bpf-the-forgotten-bytecode\/\">BPF \u2014 the forgotten bytecode<\/a><\/noindex>, \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043b\u044f <code>xt_u32<\/code>. \u0421\u043c. \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 2013 \u0433\u043e\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044f <code>xt_u32<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 BPF \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_bpf<\/code>. \u0412\u0441\u0435\u043c \u0434\u043e\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u043c \u0434\u043e \u0441\u044e\u0434\u0430 \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044f\u0441\u0435\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 BPF \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0430\u0432\u0438\u043b iptables. \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">iptables -A INPUT -m bpf --bytecode &lt;\u0431\u0430\u0439\u0442\u043a\u043e\u0434&gt; -j LOG<\/code><\/pre>\n<p><\/p>\n<p>\u0437\u0434\u0435\u0441\u044c <code>&lt;\u0431\u0430\u0439\u0442\u043a\u043e\u0434&gt;<\/code> \u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 <code>bpf_asm<\/code> \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cat \/tmp\/test.bpf\nldb [9]\njneq #17, ignore\nret #1\nignore: ret #0\n\n$ bpf_asm \/tmp\/test.bpf\n4,48 0 0 9,21 0 1 17,6 0 0 1,6 0 0 0,\n\n# iptables -A INPUT -m bpf --bytecode &quot;$(bpf_asm \/tmp\/test.bpf)&quot; -j LOG<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0432\u0441\u0435 UDP \u043f\u0430\u043a\u0435\u0442\u044b. \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 <code>xt_bpf<\/code>, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 iptables \u2014 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 IPv4. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/blob\/v5.6-rc5\/net\/netfilter\/xt_bpf.c#L96\">\u0431\u0443\u043b\u0435\u0432\u043e<\/a><\/noindex>, \u0433\u0434\u0435 <code>false<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b.<\/p>\n<p><\/p>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_bpf<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0447\u0435\u043c \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Cloudfare. \u0414\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c <code>xt_bpf<\/code> \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 DDoS \u0430\u0442\u0430\u043a. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudflare.com\/introducing-the-bpf-tools\/\">Introducing the BPF Tools<\/a><\/noindex> \u043e\u043d\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a (\u0438 \u043f\u043e\u0447\u0435\u043c\u0443) \u043e\u043d\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 BPF \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0430\u0431\u043e\u0440 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>bpfgen<\/code> \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0430\u0442\u0447\u0438\u0442 DNS-\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0438\u043c\u044f <code>habr.com<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ .\/bpfgen --assembly dns -- habr.com\nldx 4*([0]&amp;0xf)\nld #20\nadd x\ntax\n\nlb_0:\n    ld [x + 0]\n    jneq #0x04686162, lb_1\n    ld [x + 4]\n    jneq #0x7203636f, lb_1\n    ldh [x + 8]\n    jneq #0x6d00, lb_1\n    ret #65535\n\nlb_1:\n    ret #0<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>X<\/code> \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 <code>x04habrx03comx00<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441: <code>0x04686162 &lt;-&gt; &quot;x04hab&quot;<\/code> \u0438 \u0442.\u0434.<\/p>\n<p><\/p>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435 Cloudfare \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 p0f -&gt; BPF. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudflare.com\/introducing-the-p0f-bpf-compiler\/\">Introducing the p0f BPF compiler<\/a><\/noindex> \u043e\u043d\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 p0f \u0438 \u043a\u0430\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c p0f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0432 BPF:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ .\/bpfgen p0f -- 4:64:0:0:*,0::ack+:0\n39,0 0 0 0,48 0 0 8,37 35 0 64,37 0 34 29,48 0 0 0,\n84 0 0 15,21 0 31 5,48 0 0 9,21 0 29 6,40 0 0 6,\n...<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 Cloudfare \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>xt_bpf<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043d\u0430 XDP \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 BPF, \u0441\u043c. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.cloudflare.com\/l4drop-xdp-ebpf-based-ddos-mitigations\/\">L4Drop: XDP DDoS Mitigations<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h2 id=\"cls_bpf\"><code>cls_bpf<\/code><\/h2>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF \u0432 \u044f\u0434\u0440\u0435 \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>cls_bpf<\/code> \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 Linux, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 Linux \u0432 \u043a\u043e\u043d\u0446\u0435 2013 \u0433\u043e\u0434\u0430 \u0438 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0439 \u0434\u0440\u0435\u0432\u043d\u0438\u0439 <code>cls_u32<\/code>.<\/p>\n<p><\/p>\n<p>\u041c\u044b, \u043e\u0434\u043d\u0430\u043a\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 <code>cls_bpf<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u043d\u0438\u0439 \u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c BPF \u044d\u0442\u043e \u043d\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u0441\u0442 \u2014 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u0431 Extended BPF, \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p><\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF c <code>cls_bpf<\/code> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 Extended BPF \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0441\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438: \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043f\u0440\u043e\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c BPF \u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p><\/p>\n<h2 id=\"proschanie-s-classic-bpf\">\u041f\u0440\u043e\u0449\u0430\u043d\u0438\u0435 \u0441 classic BPF<\/h2>\n<p><\/p>\n<p>\u041c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f BPF, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u044b\u0445 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0436\u0438\u043b\u0430 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0432\u0435\u043a\u0430 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u043d\u0430 RISC, \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0432\u0448\u0435\u043c\u0443 \u0442\u043e\u043b\u0447\u043a\u043e\u043c \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF, \u0432 \u0434\u0432\u0443\u0445\u0442\u044b\u0441\u044f\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 BPF \u0441\u0442\u0430\u043b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0438 \u043f\u043e\u043c\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u2014 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 BPF \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u044f\u0434\u0440\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>sk_buff<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u043e\u0432, \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0445.<\/p>\n<p><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e BPF \u0432 Linux \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e API \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430 \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0431\u0443\u0434\u044c \u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b seccomp, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, Extended BPF. (\u041c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u043e \u0442\u043e \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.)<\/p>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0432 2013 \u0433\u043e\u0434\u0443, \u043a\u043e\u0433\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0421\u0442\u0430\u0440\u043e\u0432\u043e\u0439\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0441\u0445\u0435\u043c\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f BPF. \u0412 2014 \u0433\u043e\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0442\u0447\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/torvalds\/linux\/commit\/bd4cf0ed331a275e9bf5a49e6d0fd55dffc551b8\">\u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f<\/a><\/noindex> \u0432 \u044f\u0434\u0440\u0435. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 JIT-compiler \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u043e \u043d\u043e\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 Linux.<\/p>\n<p><\/p>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443\u0442 \u043e\u0431 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043a\u0430\u043a internal BPF, \u0437\u0430\u0442\u0435\u043c extended BPF, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e BPF.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p><\/p>\n<ol>\n<li>Steven McCanne and Van Jacobson, &quot;The BSD Packet Filter: A New Architecture for User-level Packet Capture&quot;, <code>https:\/\/www.tcpdump.org\/papers\/bpf-usenix93.pdf<\/code><\/li>\n<li>Steven McCanne, &quot;libpcap: An Architecture and Optimization Methodology for Packet Capture&quot;, <code>https:\/\/sharkfestus.wireshark.org\/sharkfest.11\/presentations\/McCanne-Sharkfest'11_Keynote_Address.pdf<\/code><\/li>\n<li><code>tcpdump<\/code>, <code>libpcap<\/code>: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tcpdump.org\/\">https:\/\/www.tcpdump.org\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.stearns.org\/doc\/iptables-u32.current.html\">IPtable U32 Match Tutorial<\/a><\/noindex>.<\/li>\n<li>BPF \u2014 the forgotten bytecode: <code>https:\/\/blog.cloudflare.com\/bpf-the-forgotten-bytecode\/<\/code><\/li>\n<li>Introducing the BPF Tool: <code>https:\/\/blog.cloudflare.com\/introducing-the-bpf-tools\/<\/code><\/li>\n<li><code>bpf_cls<\/code>: <code>http:\/\/man7.org\/linux\/man-pages\/man8\/tc-bpf.8.html<\/code><\/li>\n<li>A seccomp overview: <code>https:\/\/lwn.net\/Articles\/656307\/<\/code><\/li>\n<li><code>https:\/\/github.com\/torvalds\/linux\/blob\/master\/Documentation\/userspace-api\/seccomp_filter.rst<\/code><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/322046\/\">habr: \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c: seccomp<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/270165\/\">habr: \u0418\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u0435\u043c\u043e\u043d\u044b \u0441 systemd \u0438\u043b\u0438 \u00ab\u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d Docker \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e!\u00bb<\/a><\/noindex><\/li>\n<li>Paul Chaignon, &quot;strace &#8212;seccomp-bpf: a look under the hood&quot;, <code>https:\/\/fosdem.org\/2020\/schedule\/event\/debugging_strace_bpf\/<\/code><\/li>\n<li><code>netsniff-ng<\/code>: <code>http:\/\/netsniff-ng.org\/<\/code><\/li>\n<\/ol>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/493880\/\">habr.com<\/a> <\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Berkeley Packet Filters (BPF) \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u043e\u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434. \u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u0431\u0438\u0442\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 BPF. David Miller, \u043c\u0430\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0430 Linux Plumbers 2018 \u00abThis talk is not about XDP\u00bb (XDP \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":75372,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-75371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Berkeley Packet Filters (BPF) \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u043e\u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434. \u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u0431\u0438\u0442\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 BPF. David Miller, \u043c\u0430\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0430 Linux Plumbers 2018 \u00abThis talk is not about XDP\u00bb (XDP \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0447\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f: classic BPF | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Berkeley Packet Filters (BPF) \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u043e\u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434. \u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u0431\u0438\u0442\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 BPF. David Miller, \u043c\u0430\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0430 Linux Plumbers 2018 \u00abThis talk is not about XDP\u00bb (XDP \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-25T17:42:37+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-25T17:42:37+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47BPF per i pi\u00f9 piccoli, parte zero: classic BPF | ProHoster","description":"I Berkeley Packet Filters (BPF) sono una tecnologia del kernel Linux che da diversi anni occupa le prime pagine delle pubblicazioni tecniche di lingua inglese. Le conferenze sono piene di presentazioni sull'uso e lo sviluppo di BPF. David Miller, il manutentore del sottosistema di rete di Linux, ha intitolato la sua presentazione al Linux Plumbers 2018 \u00abThis talk is not about XDP\u00bb (XDP \u00e8 uno dei)","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47BPF \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, \u0447\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f: classic BPF | ProHoster","og:description":"Berkeley Packet Filters (BPF) \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u043e\u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0430\u043d\u0438\u0439 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u043e\u0434\u0440\u044f\u0434. \u041a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u0431\u0438\u0442\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 BPF. David Miller, \u043c\u0430\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Linux, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434 \u043d\u0430 Linux Plumbers 2018 \u00abThis talk is not about XDP\u00bb (XDP \u2013 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/bpf-dlya-samyh-malenkih-chast-nulevaya-classic-bpf","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-25T17:42:37+00:00","article:modified_time":"2020-03-25T17:42:37+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"75371","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:57:27","updated":"2022-09-30 06:44:06"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/75371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=75371"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/75371\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/75372"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=75371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=75371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=75371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}