{"id":490311,"date":"2026-08-09T14:10:20","date_gmt":"2026-08-09T14:10:20","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=490311"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=490311","title":{"rendered":"DPI \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0414\u0432\u0438\u0436\u043e\u043a \u043d\u0430 C: \u043e\u0442 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432<\/h2>\n<p>\u041c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u0431\u0435\u0433\u0430\u044e\u0442 \u043f\u043e\u00a0\u043c\u043e\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438. \u042f \u043d\u0435\u00a0\u043d\u0430\u0448\u0451\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u00a0\u0432\u0435\u0447\u0435\u0440 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043e\u0442\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430\u00a0\u2014 \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439, \u043d\u0430\u00a0C. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Deep Packet Inspection.<\/p>\n<blockquote>\n<p><a href=\"https:\/\/gitflic.ru\/project\/wirewalk\/tiny-dpi-engine\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/p>\n<\/blockquote>\n<p><em>\u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c\u00a0\u2014 \u0446\u0438\u0442\u0430\u0442\u044b \u0438\u0437\u00a0\u043c\u0443\u043b\u044c\u0442\u0438\u043a\u0430 \u00ab\u0428\u0440\u0435\u043a\u00bb.<\/em> (\u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u044f\u00a0\u0431\u044b\u043b \u0444\u0430\u043d\u0430\u0442, \u043d\u043e\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f.) (\u042d\u0439, \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f \u0447\u0442\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0446\u0438\u0442\u0430\u0442 \u0434\u043b\u044f\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u2014 \u044f \u043e\u0442\u043a\u0440\u044b\u0442 \u043a\u00a0\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c!)<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 DPI \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d<\/h3>\n<blockquote>\n<p><em>\u2014 \u0422\u0430\u043c \u0442\u0430\u043a \u0442\u0435\u043c\u043d\u043e \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u043e!<\/em> <em>\u2014 \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0435. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e.<\/em><\/p>\n<\/blockquote>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0441\u0430\u0439\u0442, \u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0442\u043d\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442 \u0441\u00a0\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u043d\u0430\u00a0\u043e\u0431\u043b\u043e\u0436\u043a\u0435 (IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b) \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0432\u043d\u0443\u0442\u0440\u0438.<\/p>\n<p><strong>Payload<\/strong> (\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430)\u00a0\u2014 \u044d\u0442\u043e \u00ab\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u00bb. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b)\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u043d\u0430\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u00bb.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u0438\u043b\u0438\u00a0firewall \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043d\u0430\u0434\u043f\u0438\u0441\u0438: \u00ab\u043f\u043e\u0440\u0442 80\u00a0\u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043f\u043e\u0440\u0442 25\u00a0\u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u00bb. \u041d\u043e\u00a0\u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043a\u0442\u043e\u2011\u0442\u043e \u043a\u0440\u0443\u0442\u0438\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 443\u00a0(\u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u044f\u0442 HTTPS)? \u041f\u043e\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0443 \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0448\u044c\u00a0\u2014 \u043e\u0431\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e.<\/p>\n<p><strong>Deep Packet Inspection<\/strong> (DPI, \u00ab\u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb)\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0438. \u041f\u043e\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043f\u043e\u0440\u0442\u0430.<\/p>\n<p><strong>\u0413\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0441\u0430\u043c\u0438\u2011\u0437\u043d\u0430\u0435\u0442\u0435\u2011\u0433\u0434\u0435<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433, \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u0432\u044f\u0437\u0438: \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0441 (VoIP) \u043d\u0430\u0434 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (IDS\/IPS): \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430\u00a0\u2014 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e, \u043a\u0430\u043a\u043e\u0439\u00a0\u2014 DNS<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0440\u0435\u043b\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f: nDPI, L7-filter, libprotoident. \u0417\u0430\u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0451? <strong>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u00a0\u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/strong> \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0432\u043e\u043f\u0440\u043e\u0441\u0435.<\/p>\n<hr\/>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u0432\u0438\u0436\u043e\u043a<\/h3>\n<blockquote>\n<p><em>\u2014 \u041e\u043a\u0435\u0439, \u044d\u2011\u044d\u2026 \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u043d\u0430\u0447\u0430\u043b\u0430?<\/em> <em>\u2014 \u0414\u0430, \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u043d\u0430\u0447\u0430\u043b\u0430.<\/em><\/p>\n<\/blockquote>\n<p>\u041d\u0430\u0448 DPI\u2011\u0434\u0432\u0438\u0436\u043e\u043a\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0443\u044e \u043b\u0435\u043d\u0442\u0443: \u043d\u0430\u00a0\u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u044b\u0440\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442, \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0434\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435\u00a0\u2014 \u00ab\u044d\u0442\u0438\u043a\u0435\u0442\u043a\u0430\u00bb \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/p>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502   \u0417\u0430\u0445\u0432\u0430\u0442    \u2502\u2500\u2500\u2500&gt;\u2502  \u0420\u0430\u0437\u0431\u043e\u0440   \u2502\u2500\u2500\u2500&gt;\u2502  \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u2502\u2500\u2500\u2500&gt;\u2502    \u0422\u0430\u0431\u043b\u0438\u0446\u0430   \u2502\u2502  (libpcap)  \u2502    \u2502  \u043f\u0430\u043a\u0435\u0442\u043e\u0432  \u2502    \u2502  \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432    \u2502    \u2502    \u043f\u043e\u0442\u043e\u043a\u043e\u0432   \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0430\u0434\u0438\u0438:<\/p>\n<ol>\n<li>\n<p><strong>\u0417\u0430\u0445\u0432\u0430\u0442<\/strong>\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u044b\u0440\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0438\u0437\u00a0\u0441\u0435\u0442\u0438<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u0431\u043e\u0440<\/strong>\u00a0\u2014 \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u00ab\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u00bb: \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b, payload<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/strong>\u00a0\u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u043e\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/strong>\u00a0\u2014 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u0447\u0435\u043c \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u0441\u0442\u0430\u0434\u0438\u044f? \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0432\u044b \u043e\u0431\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u00a0\u0441\u0430\u0439\u0442\u043e\u043c. \u042d\u0442\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u00a0\u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0442\u0443\u0434\u0430\u2011\u0441\u044e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0443, \u043d\u0435\u0437\u0430\u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e.<\/p>\n<p><strong>\u041f\u043e\u0442\u043e\u043a<\/strong> (flow)\u00a0\u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u00a0\u043f\u044f\u0442\u0438 \u043f\u043e\u043b\u044f\u043c: src_ip, dst_ip, src_port, dst_port, ip_proto. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u044f\u0442\u044c\u00a0\u2014 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>stateful<\/strong>\u2011\u043f\u043e\u0434\u0445\u043e\u0434 (\u00ab\u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u00bb).<\/p>\n<hr\/>\n<h3>\u0417\u0430\u0445\u0432\u0430\u0442 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u0435\u0442\u044c<\/h3>\n<blockquote>\n<p><em>\u2014 \u042d\u2011\u044d\u2026 \u043c\u044b \u0442\u043e\u0447\u043d\u043e \u0442\u0443\u0434\u0430 \u0438\u0434\u0451\u043c?<\/em> <em>\u2014 \u041a\u043e\u043d\u0435\u0447\u043d\u043e!.. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435.<\/em><\/p>\n<\/blockquote>\n<p>\u0412\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0441\u0432\u043e\u0438\u00bb\u00a0\u2014 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 HTTP, \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0441\u0432\u043e\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041d\u043e\u00a0\u0434\u043b\u044f\u00a0DPI \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c <strong>\u0432\u0441\u0435<\/strong> \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <strong>promiscuous mode<\/strong> (\u00ab\u043d\u0435\u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\u00bb). \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u00a0\u0435\u0439. \u0412\u00a0promiscuous mode \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u041e\u0421 \u0432\u0441\u0451, \u0447\u0442\u043e \u00ab\u0441\u043b\u044b\u0448\u0438\u0442\u00bb\u00a0\u2014 \u0438 \u0447\u0443\u0436\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0442\u043e\u0436\u0435.<\/p>\n<p><strong>libpcap<\/strong>\u00a0\u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0Linux, macOS, *BSD, \u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u041e\u0421.<\/p>\n<blockquote>\n<p>\u0414\u043b\u044f\u00a0\u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0430\u0432\u0430 root (<code>sudo<\/code>)\u00a0\u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u041e\u0421. (\u041d\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a.)<\/p>\n<\/blockquote>\n<pre><code class=\"cpp\">pcap_t *handle = pcap_open_live(\"eth0\", 65535, 1, 1000, errbuf);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (<code>\"eth0\"<\/code> \u2014 \u0438\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b), \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 (65535 \u2014 \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c), promiscuous mode (1 = \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c), \u0442\u0430\u0439\u043c\u0430\u0443\u0442 (1000 \u043c\u0441).<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 libpcap \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u043f\u0430\u043a\u0435\u0442, \u043e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0\u2014 <strong>callback<\/strong>. Callback\u00a0\u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u043f\u0440\u0438\u00a0\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">void callback(unsigned char *user, const struct pcap_pkthdr *h,              const unsigned char *bytes) {    dpi_parsed_packet_t pkt;    dpi_parse_packet(bytes, h-&gt;caplen, &amp;pkt);  \/\/ \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442    dpi_classify(ac, &amp;pkt, flow_table, stats);  \/\/ \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>bytes<\/code> &#8212; \u0441\u044b\u0440\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. <code>h-&gt;caplen<\/code> &#8212; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043e.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 libpcap, \u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e?<\/strong> \u041d\u0430 Linux \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f AF_PACKET, \u043d\u0430\u00a0macOS\u00a0\u2014 BPF, \u043d\u0430\u00a0FreeBSD\u00a0\u2014 \/dev\/bpf. libpcap \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u00a0\u2014 \u043e\u0434\u0438\u043d \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0437\u00a0pcap\u2011\u0444\u0430\u0439\u043b\u043e\u0432\u00a0\u2014 \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<hr\/>\n<h3>\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442<\/h3>\n<blockquote>\n<p><em>\u2014 \u041e\u0433\u0440\u044b\u00a0\u2014 \u043e\u043d\u0438 \u043a\u0430\u043a\u00a0\u043b\u0443\u043a! \u0423\u00a0\u043d\u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0451\u0432!<\/em> <em>\u2014 \u0412\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u0435\u00a0\u0432\u0441\u0435 \u043b\u044e\u0431\u044f\u0442 \u043b\u0443\u043a!<\/em><\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c. \u0412\u043e\u0442 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 hex-\u0434\u0430\u043c\u043f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code>ff ff ff ff ff ff   00 11 22 33 44 55   08 00^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^   ^^^^^dst MAC (6 \u0431\u0430\u0439\u0442)   src MAC (6 \u0431\u0430\u0439\u0442)    ethertype: 0x0800 = IPv4                    &lt;- 14 \u0431\u0430\u0439\u0442 = Ethernet-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;45 00 00 2e  00 01 00 00  40 06 ?? ??  c0 a8 01 01  c0 a8 01 02^            ^            ^  ^          ^^^^^^^^^^^   ^^^^^^^^^^^ver=4,       \u0434\u043b\u0438\u043d\u0430        TTL, TCP     src:          dst:IHL=5 (20 \u0431) \u0432\u0441\u0435\u0433\u043e        proto=6      192.168.1.1   192.168.1.2                    &lt;- 20 \u0431\u0430\u0439\u0442 = IPv4-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;04 01  00 50  00 00 00 01  00 00 00 00  50 02 ?? ??  ?? ??^^^^   ^^^^                                             ^^^^^^^^src:    dst:  seq                  data offset=5      window,49121   80                         (20 \u0431\u0430\u0439\u0442)          checksum                    &lt;- 20 \u0431\u0430\u0439\u0442 = TCP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;47 45 54 20 2f 69 6e 64 65 78 2e 68 74 6d 6c 20 48 54 54 50 ...G  E  T  _  \/  i  n  d  e  x  .  h  t  m  l  _  H  T  T  P ...                    &lt;- payload: \"GET \/index.html HTTP...\" -&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443: \u0442\u0440\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 (Ethernet, IP, TCP)\u00a0\u2014 \u0438 payload. \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0430\u00bb: \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439.<\/p>\n<pre><code>| Ethernet (14 \u0431\u0430\u0439\u0442) | IPv4 (20+ \u0431\u0430\u0439\u0442) | TCP (20+ \u0431\u0430\u0439\u0442) |      Payload      |<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0442\u043e\u0436\u0435 \u043b\u044e\u0431\u0438\u043b\u0438 <s>\u043b\u0443\u043a<\/s> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441\u043e \u0441\u043b\u043e\u044f\u043c\u0438\u00a0\u2014 \u043c\u043e\u0434\u0435\u043b\u044c OSI \u044d\u0442\u043e \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u0442\u0430\u043a\u0438 7\u00a0\u0441\u043b\u043e\u0451\u0432. \u041d\u043e\u00a0\u043d\u0430\u043c \u0434\u043b\u044f\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e DPI \u0445\u0432\u0430\u0442\u0438\u0442 \u0447\u0435\u0442\u044b\u0440\u0451\u0445.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e.<\/p>\n<hr\/>\n<h3>\u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: \u0441\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u043b\u043e\u0438 \u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0438<\/h3>\n<blockquote>\n<p><em>\u2014 \u042d\u0442\u043e \u0447\u0442\u043e, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043a\u0440\u043e\u0432\u044c?<\/em> <em>\u2014 \u041d\u0443\u2026 \u044d\u0442\u043e \u043d\u0435\u00a0\u041d\u0410\u0428\u0410 \u043a\u0440\u043e\u0432\u044c.<\/em><\/p>\n<\/blockquote>\n<h4>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0439\u0442\u043e\u0432: \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451 \u00ab\u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u00bb<\/h4>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\u00a0\u2014 \u043e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c. \u0412\u00a0\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u043c\u043d\u043e\u0433\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:<\/p>\n<ul>\n<li>\n<p><strong>Little-endian<\/strong> (x86, ARM): \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0432\u044b\u043c. \u0427\u0438\u0441\u043b\u043e <code>0x1234<\/code> -&gt; \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 <code>34 12<\/code><\/p>\n<\/li>\n<li>\n<p><strong>Big-endian<\/strong> (\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a): \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0432\u044b\u043c. \u0422\u043e \u0436\u0435 \u0447\u0438\u0441\u043b\u043e -&gt; <code>12 34<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 big\u2011endian\u00a0\u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>network byte order<\/strong>. \u0410\u00a0\u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, little\u2011endian. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0447\u0438\u0441\u0435\u043b \u0438\u0437\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u00ab\u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u00bb \u0431\u0430\u0439\u0442\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>ntohs()<\/code>\u00a0\u2014 <strong>n<\/strong>etwork <strong>to<\/strong> <strong>h<\/strong>ost <strong>s<\/strong>hort\u00a0\u2014 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e:<\/p>\n<pre><code class=\"cpp\">uint16_t ethertype = ntohs(out-&gt;eth-&gt;ethertype);  \/\/ \"\u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\" 2 \u0431\u0430\u0439\u0442\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0431\u044b\u043b\u0438 ntohs\u00a0\u2014 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 <code>0x0800<\/code> (IPv4) \u043a\u0430\u043a <code>0x0008<\/code> \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442\u0435. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<h4>Ethernet \u2192 IP<\/h4>\n<pre><code class=\"cpp\">int dpi_parse_packet(const uint8_t *raw, size_t raw_len,                     dpi_parsed_packet_t *out) {    const uint8_t *ptr = raw;          \/\/ \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435    const uint8_t *end = raw + raw_len; \/\/ \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0443\u0444\u0435\u0440\u0430    \/* Ethernet: 14 \u0431\u0430\u0439\u0442 - dst_mac(6) + src_mac(6) + ethertype(2) *\/    if (raw_len &lt; 14) return -1;        \/\/ \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 - \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c    out-&gt;eth = (const dpi_eth_header_t *)ptr;    uint16_t ethertype = ntohs(out-&gt;eth-&gt;ethertype);    ptr += 14;                          \/\/ \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 14 \u0431\u0430\u0439\u0442<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u044b \u0431\u0435\u0440\u0451\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u00a0\u043d\u0430\u0447\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 <strong>\u043a\u0430\u0441\u0442\u0443\u0435\u043c<\/strong> \u0435\u0433\u043e \u043a\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. Cast (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430)\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443: \u00ab\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0439 \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u044b \u043a\u0430\u043a\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u00a0\u0442\u0430\u043a\u0438\u043c\u0438\u2011\u0442\u043e \u043f\u043e\u043b\u044f\u043c\u0438\u00bb. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u0442\u0435\u00a0\u0436\u0435 \u0431\u0430\u0439\u0442\u044b \u00ab\u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0447\u043a\u0438\u00bb.<\/p>\n<p>\u041f\u043e\u043b\u0435 <strong>ethertype<\/strong> (2\u00a0\u0431\u0430\u0439\u0442\u0430) \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0438:<\/p>\n<ul>\n<li>\n<p><code>0x0800<\/code>\u00a0\u2014 IPv4\u00a0(\u0442\u043e \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p><code>0x86DD<\/code>\u00a0\u2014 IPv6\u00a0(\u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c)<\/p>\n<\/li>\n<li>\n<p><code>0x8100<\/code>\u00a0\u2014 VLAN\u2011\u0442\u0435\u0433 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u00a0IPv4\u00a0\u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442.<\/p>\n<h4>VLAN: \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0441\u0435\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e<\/h4>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430\u00a0\u043e\u0434\u0438\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0431\u0435\u043b\u044c (\u0438\u043b\u0438 Wi\u2011Fi) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439\u00a0\u2014 <strong>VLAN<\/strong> (Virtual LAN). \u0412\u00a0\u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u00a0\u043a\u0430\u0434\u0440 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f 4\u00a0\u0431\u0430\u0439\u0442\u0430\u00a0\u2014 \u00ab\u0431\u0438\u0440\u043a\u0430\u00bb \u0441\u00a0\u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438:<\/p>\n<pre><code class=\"markdown\">| Ethernet (12 \u0431\u0430\u0439\u0442) | VLAN-\u0442\u0435\u0433 (4 \u0431\u0430\u0439\u0442\u0430) | \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 ethertype | \u0434\u0430\u043d\u043d\u044b\u0435... |<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c: \u0435\u0441\u043b\u0438 ethertype = <code>0x8100<\/code>\u00a0\u2014 \u0434\u0430\u043b\u044c\u0448\u0435 VLAN\u2011\u0442\u0435\u0433, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c 4\u00a0\u0431\u0430\u0439\u0442\u0430 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 ethertype:<\/p>\n<pre><code class=\"cpp\">if (ethertype == 0x8100) {    if (ptr + 4 &gt; end) return -1;    ethertype = read_u16_be(ptr + 2);    ptr += 4;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>IP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/h4>\n<pre><code class=\"cpp\">out-&gt;ip = (const dpi_ip_header_t *)ptr;uint8_t ihl = (out-&gt;ip-&gt;version_ihl &amp; 0x0F) * 4;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/strong>. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e.<\/p>\n<p>\u041f\u043e\u043b\u0435 <code>version_ihl<\/code>\u00a0\u2014 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b\u00bb \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>\u0431\u0438\u0442\u044b:  7  6  5  4 | 3  2  1  0       \u0432\u0435\u0440\u0441\u0438\u044f IP  |    IHL       (= 4)      | (= 5 \u043e\u0431\u044b\u0447\u043d\u043e)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u00ab\u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c\u00bb \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>&amp;<\/code> (\u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418) \u0441\u00a0\u043c\u0430\u0441\u043a\u043e\u0439 <code>0x0F<\/code> (<code>0000 1111<\/code>) \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u00a0\u2014 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430, \u043e\u0431\u043d\u0443\u043b\u044f\u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0435:<\/p>\n<pre><code>version_ihl = 0x45  = 0100 0101mask         = 0x0F  = 0000 1111\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442    = 0x05  = 0000 0101  &lt;- IHL = 5<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 4\u00a0\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u0437 \u00ab32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u00bb \u0432\u00a0\u0431\u0430\u0439\u0442\u044b: IHL=5\u00a0\u2192 20\u00a0\u0431\u0430\u0439\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c, \u043d\u043e\u00a0\u0441\u00a0\u043e\u043f\u0446\u0438\u044f\u043c\u0438 IP\u00a0\u2014 \u0434\u043e 60.<\/p>\n<h4>TCP: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b<\/h4>\n<p>TCP \u0441\u043b\u043e\u0436\u043d\u0435\u0435 UDP: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u00a0\u2014 \u043e\u0442 20\u00a0\u0434\u043e 60\u00a0\u0431\u0430\u0439\u0442. \u0414\u043b\u0438\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u043f\u043e\u043b\u0435 <strong>Data Offset<\/strong>\u00a0\u2014 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430 <code>data_offset_flags<\/code>:<\/p>\n<pre><code class=\"cpp\">uint16_t tcp_hdr_len = ((ntohs(tcp-&gt;data_offset_flags) &gt;&gt; 12) &amp; 0xF) * 4;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<ol>\n<li>\n<p><code>ntohs(...)<\/code>\u00a0\u2014 \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u044b (\u043a\u0430\u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0432\u044b\u0448\u0435)<\/p>\n<\/li>\n<li>\n<p><code>&gt;&gt; 12<\/code>\u00a0\u2014 <strong>\u043f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 \u0432\u043f\u0440\u0430\u0432\u043e<\/strong> \u043d\u0430 12\u00a0\u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f: \u0432\u00a0\u0447\u0438\u0441\u043b\u0435 12\u00a0345\u00a0\u0443\u0431\u0440\u0430\u0442\u044c \u0442\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0446\u0438\u0444\u0440\u044b\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 12. \u0417\u0434\u0435\u0441\u044c \u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e\u00a0\u0441\u00a0\u0431\u0438\u0442\u0430\u043c\u0438: \u00ab\u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u00bb 12\u00a0\u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0431\u0438\u0442, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e\u043b\u044c\u043a\u043e 4\u00a0\u0441\u0442\u0430\u0440\u0448\u0438\u0445.<\/p>\n<\/li>\n<li>\n<p><code>&amp; 0xF<\/code>\u00a0\u2014 \u043c\u0430\u0441\u043a\u0430, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 4\u00a0\u0431\u0438\u0442\u0430<\/p>\n<\/li>\n<li>\n<p><code>* 4<\/code>\u00a0\u2014 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0438\u0437\u00a0\u0441\u043b\u043e\u0432 \u0432\u00a0\u0431\u0430\u0439\u0442\u044b<\/p>\n<\/li>\n<\/ol>\n<p><strong>Payload<\/strong> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 TCP\/UDP:<\/p>\n<pre><code class=\"cpp\">out-&gt;payload = ptr;                        \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e payloadout-&gt;payload_len = (size_t)(ip_end - ptr);  \/\/ \u0431\u0430\u0439\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 IP-\u043f\u0430\u043a\u0435\u0442\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>Zero-copy: \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435<\/h4>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435: \u043c\u044b \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043f\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0412\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 (<code>out-&gt;eth<\/code>, <code>out-&gt;ip<\/code>, <code>out-&gt;payload<\/code>) \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 <strong>\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440<\/strong> libpcap. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>zero\u2011copy<\/strong>.<\/p>\n<p>\u041f\u0440\u0438\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 10\u00a0\u0413\u0431\u0438\u0442\/\u0441 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 ~1.5\u00a0\u043c\u043b\u043d \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0441\u0435\u043a. \u0415\u0441\u043b\u0438\u00a0\u0431\u044b \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439\u00a0\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b\u00a0\u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 <code>memcpy<\/code>, \u0447\u0435\u043c \u043d\u0430\u00a0\u0430\u043d\u0430\u043b\u0438\u0437. \u0410\u00a0\u0442\u0430\u043a\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u0441\u043c\u043e\u0442\u0440\u0438\u043c\u00bb \u043d\u0430\u00a0\u0431\u0430\u0439\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0434\u0435\u0448\u0435\u0432\u043e \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e.<\/p>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446<\/h4>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433: <code>if (ptr + 20 &gt; end) return -1;<\/code>. \u0415\u0441\u043b\u0438\u0431\u0430\u0439\u0442\u043e\u0432 \u043d\u0435\u00a0\u0445\u0432\u0430\u0442\u0430\u0435\u0442\u00a0\u2014 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u0412\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438\u00a0\u0431\u044b\u0432\u0430\u044e\u0442 \u00ab\u0431\u0438\u0442\u044b\u0435\u00bb \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 (\u043e\u0442 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432). \u0421\u0442\u0440\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u0442\u043e \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442\u00a0\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<hr\/>\n<h3>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432: \u0442\u0440\u0438 \u043b\u0438\u043d\u0438\u0438 \u043e\u0431\u043e\u0440\u043e\u043d\u044b<\/h3>\n<blockquote>\n<p><em>\u2014 \u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u044b \u0437\u043d\u0430\u0435\u0448\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d\u00a0\u2014 \u043e\u0433\u0440?<\/em> <em>\u2014 \u041e\u043d \u0441\u0430\u043c \u0441\u043a\u0430\u0437\u0430\u043b!<\/em> <em>\u2014 \u0410\u00a0\u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u0440\u0430\u043b?<\/em><\/p>\n<\/blockquote>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u043b\u0438 payload \u0438\u0437\u00a0\u043f\u0430\u043a\u0435\u0442\u0430. \u0427\u0442\u043e\u00a0\u0441\u00a0\u043d\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c? \u0418\u0441\u043a\u0430\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b\u00a0\u2014 <strong>\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b<\/strong> \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432.<\/p>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong>\u00a0\u2014 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">HTTP<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>47 45 54 20<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"GET \"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">SSH<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>53 53 48 2d<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"SSH-\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TLS<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>16 03 01<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0430\u0439\u0442 0x16 + \u0432\u0435\u0440\u0441\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">SIP<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>49 4e 56 49 54 45 20<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"INVITE \"<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u043e\u00a0\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b\u00a0\u2014 \u043d\u0435\u00a0\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <strong>\u0442\u0440\u0451\u0445\u0441\u0442\u0430\u0434\u0438\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e<\/strong>:<\/p>\n<pre><code>\u041f\u0430\u043a\u0435\u0442 -&gt; \u041f\u043e\u0442\u043e\u043a \u0443\u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d?         \u251c\u2500 \u0414\u0430 -&gt; \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c (\u0431\u044b\u0441\u0442\u0440\u043e!)         \u2514\u2500 \u041d\u0435\u0442 -&gt;              \u251c\u2500 \u0421\u0442\u0430\u0434\u0438\u044f 1: \u0418\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f payload              \u2502   \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0431\u0430\u0439\u0442\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:              \u2502   \"GET \" -&gt; HTTP, 0x16 0x03 -&gt; TLS,              \u2502   version=2 + PT=0..34 -&gt; RTP              \u2502              \u251c\u2500 \u0421\u0442\u0430\u0434\u0438\u044f 2: \u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a              \u2502   \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430              \u2502              \u2514\u2500 \u0421\u0442\u0430\u0434\u0438\u044f 3: \u0424\u043e\u043b\u0431\u044d\u043a \u043d\u0430 \u043f\u043e\u0440\u0442\u044b                  80 -&gt; HTTP, 443 -&gt; HTTPS, 53 -&gt; DNS, 22 -&gt; SSH...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0440\u0438 \u0441\u0442\u0430\u0434\u0438\u0438, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b?<\/strong><\/p>\n<p>\u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 TLS \u043d\u0430\u00a0\u043f\u043e\u0440\u0442\u0443 443\u00a0\u043d\u0435\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <code>\"GET \"<\/code>\u00a0\u2014 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d. \u041d\u043e\u00a0\u043f\u043e\u00a0\u043f\u043e\u0440\u0442\u0443 \u043c\u044b \u0437\u043d\u0430\u0435\u043c: \u044d\u0442\u043e HTTPS. RTP \u043d\u0430\u00a0\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443\u00a0\u2014 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0430\u00a0\u043d\u0435\u00a0\u043f\u043e\u00a0\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435. \u0410\u00a0HTTP \u043d\u0430\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443 8080\u00a0\u2014 \u043b\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 <code>\"GET \"<\/code>.\u201c\u00bb<\/p>\n<p>\u0422\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u0421\u0430\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438\u0437\u00a0\u043d\u0438\u0445\u00a0\u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<hr\/>\n<h3>\u0410\u0445\u043e-\u041a\u043e\u0440\u0430\u0441\u0438\u043a: \u043f\u043e\u0438\u0441\u043a 50 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434<\/h3>\n<blockquote>\n<p><em>\u2014 \u042f \u0437\u043d\u0430\u044e, \u043e\u00a0\u0447\u0451\u043c \u0442\u044b \u0434\u0443\u043c\u0430\u0435\u0448\u044c!<\/em> <em>\u2014 \u2026\u041f\u043e\u043d\u0447\u0438\u043a?<\/em> <em>\u2014 \u041d\u0415\u0422! \u0425\u043e\u0442\u044f\u2026 \u0434\u0430, \u043f\u043e\u043d\u0447\u0438\u043a.<\/em><\/p>\n<\/blockquote>\n<p>\u041d\u0430\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e\u00a0payload. 50\u00a0\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u00d7 1400\u00a0\u0431\u0430\u0439\u0442 = 70\u202f000\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043d\u0430\u00a0\u043f\u0430\u043a\u0435\u0442. \u041c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e.<\/p>\n<p><strong>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0410\u0445\u043e\u2011\u041a\u043e\u0440\u0430\u0441\u0438\u043a<\/strong> \u0438\u0449\u0435\u0442 \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0437\u0430 <strong>\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434<\/strong> \u043f\u043e\u00a0payload. \u0414\u0432\u0430 \u0438\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u0430: trie\u2011\u0434\u0435\u0440\u0435\u0432\u043e \u0438 failure\u2011\u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<h4>Trie\u2011\u0434\u0435\u0440\u0435\u0432\u043e<\/h4>\n<p><strong>Trie<\/strong>\u00a0\u2014 \u0434\u0435\u0440\u0435\u0432\u043e, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0442\u00a0\u043a\u043e\u0440\u043d\u044f \u043a\u00a0\u043b\u0438\u0441\u0442\u0443\u00a0\u2014 \u043e\u0434\u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b\u00a0\u2014 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430 \u043f\u043e\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440: <code>\"abc\"<\/code> \u0438 <code>\"bc\"<\/code>:<\/p>\n<pre><code>    root   \/    \\  a      b  |      |  b      c [bc!]  |  c [abc!]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c <code>\"abc\"<\/code>: root -&gt; <code>a<\/code> -&gt; <code>a-&gt;b<\/code> -&gt; <code>a-&gt;b-&gt;c<\/code> -&gt; \u043d\u0430\u0448\u043b\u0438 \u201cabc\u201d! \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0438\u0434\u0451\u043c \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443.<\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 <code>\"xbc\"<\/code>? <code>x<\/code> \u2014 \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u0437 root, \u0441\u0442\u043e\u0438\u043c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. <code>b<\/code> \u2014 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437 root, \u0438\u0434\u0451\u043c \u0432\u043f\u0440\u0430\u0432\u043e. <code>c<\/code> \u2014 \u0438\u0434\u0451\u043c \u0432 <code>b-&gt;c<\/code> -&gt; \u043d\u0430\u0448\u043b\u0438 \u201cbc\u201d!<\/p>\n<p>\u041f\u043e\u043a\u0430 \u0432\u0441\u0451 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h4>Failure-\u0441\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0448\u043b\u0438\u0441\u044c \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c: <code>\"abc\"<\/code> -&gt; \u043d\u0430\u0448\u043b\u0438 \u201cabc\u201d, <code>\"xbc\"<\/code> -&gt; \u043d\u0430\u0448\u043b\u0438 \u201cbc\u201d. \u0410 \u0432\u043e\u0442 <code>\"abx\"<\/code>. \u041f\u043e\u0448\u043b\u0438: <code>a<\/code> (\u0432 \u043b\u0435\u0432\u0443\u044e \u0432\u0435\u0442\u043a\u0443), <code>b<\/code> (\u0434\u0430\u043b\u044c\u0448\u0435), <code>x<\/code> \u2014 \u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 <code>x<\/code> \u0438\u0437 \u0443\u0437\u043b\u0430 <code>a-&gt;b<\/code> \u043d\u0435\u0442. \u0417\u0430\u0441\u0442\u0440\u044f\u043b\u0438. \u0411\u0435\u0437 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0435\u0439\u00a0\u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 root \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 <code>x<\/code>. \u041d\u043e \u043c\u044b <strong>\u0443\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u0438<\/strong> <code>b<\/code>! \u0418 \u043e\u043f\u044f\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430?!<\/p>\n<p><strong>Failure-\u0441\u0441\u044b\u043b\u043a\u0430<\/strong> \u0438\u0437 \u0443\u0437\u043b\u0430 <code>a-&gt;b<\/code> \u0432\u0435\u0434\u0451\u0442 \u043d\u0435 \u0432 root, \u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0443\u0437\u0435\u043b <code>b<\/code> \u043f\u043e\u0434 \u043a\u043e\u0440\u043d\u0435\u043c:<\/p>\n<pre><code>    root   \/    \\  a      b &lt;--- failure (a-&gt;b) \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u044e\u0434\u0430  |      |  b ------  |  c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c <code>\"abx\"<\/code>: <code>a<\/code> -&gt; <code>a-&gt;b<\/code> -&gt; \u0437\u0430\u0441\u0442\u0440\u044f\u043b\u0438. Failure \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0432 <code>b<\/code> \u043f\u043e\u0434 \u043a\u043e\u0440\u043d\u0435\u043c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 <code>x<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443\u0436\u0435 \u043e\u0442\u0442\u0443\u0434\u0430. \u041d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e\u00a0\u2014 \u0441\u0442\u043e\u0438\u043c. (\u041d\u043e \u0435\u0441\u043b\u0438\u00a0\u0431\u044b \u0432\u043c\u0435\u0441\u0442\u043e <code>x<\/code>\u00a0\u0431\u044b\u043b <code>c<\/code>\u00a0\u2014 \u043c\u044b\u00a0\u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0448\u043b\u0438 \u00abbc\u00bb, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0443\u0436\u0435 \u0441\u0442\u043e\u044f\u043b\u0438 \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.)<\/p>\n<p>\u0421\u0443\u0442\u044c: failure-\u0441\u0441\u044b\u043b\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u0432\u0435\u0440\u043d\u0438\u0441\u044c \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0442\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0441\u044f\u00bb. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u00a0\u2014 <strong>\u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434<\/strong> \u043f\u043e\u00a0payload, O(N), \u0431\u0435\u0437\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u0432.<\/p>\n<h4>\u041a\u043e\u0434: \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 failure\u2011\u0441\u0441\u044b\u043b\u043e\u043a<\/h4>\n<p>Failure\u2011\u0441\u0441\u044b\u043b\u043a\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0430\u0437\u044b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440, \u0434\u043e\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u00a0\u2014 \u043e\u0431\u0445\u043e\u0434 \u0432\u00a0\u0448\u0438\u0440\u0438\u043d\u0443 (BFS), \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u00a0\u0443\u0440\u043e\u0432\u043d\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0423\u0440\u043e\u0432\u0435\u043d\u044c 1: \u0434\u0435\u0442\u0438 \u043a\u043e\u0440\u043d\u044f - \u0438\u0445 failure = rootfor (int c = 0; c &lt; 256; c++) {    if (root-&gt;children[c]) {        root-&gt;children[c]-&gt;fail = root;    } else {        root-&gt;children[c] = root;    }}\/\/ \u0423\u0440\u043e\u0432\u043d\u0438 2, 3, ...: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0438\u0449\u0435\u043c failurewhile (head &lt; tail) {    dpi_ac_node_t *node = queue[head++];    for (int c = 0; c &lt; 256; c++) {        if (node-&gt;children[c]) {            dpi_ac_node_t *f = node-&gt;fail;            while (f != root &amp;&amp; !f-&gt;children[c])                f = f-&gt;fail;            node-&gt;children[c]-&gt;fail = f-&gt;children[c] ?: root;            queue[tail++] = node-&gt;children[c];        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f <code>root-&gt;children[c] = root<\/code> \u0434\u043b\u044f \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 &#8212; \u0445\u0438\u0442\u0440\u044b\u0439 \u0442\u0440\u044e\u043a. \u0411\u0435\u0437 \u043d\u0435\u0451 \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c: \u00ab\u0430 \u043d\u0435\u00a0\u0432\u00a0\u043a\u043e\u0440\u043d\u0435\u00a0\u043b\u0438 \u043c\u044b? \u0430\u00a0\u0435\u0441\u0442\u044c\u00a0\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434?\u00bb \u0421\u00a0\u043d\u0435\u0439\u00a0\u2014 <code>cur-&gt;children[c]<\/code> <strong>\u0432\u0441\u0435\u0433\u0434\u0430<\/strong> \u043d\u0435\u2011NULL, \u043f\u043e\u0438\u0441\u043a \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435 \u0438\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<h4>\u041a\u043e\u0434: \u043f\u043e\u0438\u0441\u043a<\/h4>\n<pre><code class=\"cpp\">int dpi_ac_search(const dpi_ac_t *ac, const uint8_t *data, size_t len) {    dpi_ac_node_t *cur = ac-&gt;root;    for (size_t i = 0; i &lt; len; i++) {        while (cur != root &amp;&amp; !cur-&gt;children[data[i]])            cur = cur-&gt;fail;        if (cur-&gt;children[data[i]])            cur = cur-&gt;children[data[i]];        if (cur-&gt;sig_id &gt;= 0)            return cur-&gt;sig_id;    }    return -1;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u043f\u043e payload. 5, 50 \u0438\u043b\u0438 5000 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u00a0\u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435.<\/p>\n<h4>\u041f\u0443\u043b \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439<\/h4>\n<p>\u0423\u0437\u043b\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u00a0\u2014 <strong>\u043f\u0443\u043b\u0430<\/strong>. \u0417\u0430\u0447\u0435\u043c?<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435\u00a0\u043f\u043e\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443, \u0430 <strong>\u043a\u044d\u0448\u2011\u043b\u0438\u043d\u0438\u044f\u043c\u0438<\/strong> \u043f\u043e 64\u00a0\u0431\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u0443\u0437\u043b\u044b \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 (\u043a\u0430\u0436\u0434\u044b\u0439 <code>malloc<\/code>\u00a0\u2014 \u0433\u0434\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f)\u00a0\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u00ab\u043f\u0440\u043e\u043c\u0430\u0445\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u043c\u0438\u043c\u043e \u043a\u044d\u0448\u0430 \u0438 \u0436\u0434\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 10\u2013100\u00a0\u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0437\u043b\u044b \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435\u00a0\u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0443\u0436\u0435 \u0432\u00a0\u043a\u044d\u0448\u0435. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u043a\u044d\u0448\u2011\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong>\u00a0\u2014 \u00ab\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u043e\u043c \u2192 \u0434\u043e\u0441\u0442\u0443\u043f\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0439\u00bb.<\/p>\n<p>\u0411\u043e\u043d\u0443\u0441: \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438\u00a0\u2014 \u043e\u0434\u0438\u043d <code>free(pool)<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430.<\/p>\n<hr\/>\n<h3>RTP: \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0431\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b<\/h3>\n<blockquote>\n<p><em>\u2014 \u0422\u044b\u00a0\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e\u00a0\u043e\u0433\u0440\u044b \u043d\u0435\u00a0\u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430\u00a0\u0442\u043e\u0440\u0442\u044b!<\/em> <em>\u2014 \u0413\u043e\u0432\u043e\u0440\u0438\u043b. \u041d\u043e\u00a0\u044d\u0442\u043e\u0442\u00a0\u2014 \u043f\u043e\u0445\u043e\u0436.<\/em><\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u00a0\u2014 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>RTP (Real\u2011time Transport Protocol) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0433\u043e\u043b\u043e\u0441\u0430 \u0438 \u0432\u0438\u0434\u0435\u043e \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438: \u0437\u0432\u043e\u043d\u043a\u0438, \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438. \u0423\u00a0\u043d\u0435\u0433\u043e <strong>\u043d\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b<\/strong>\u00a0\u2014 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043a\u0430\u0442\u044c <code>\"RTP\"<\/code> \u0432\u00a0payload. \u041d\u043e\u00a0\u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">if (payload_len &gt;= 12) {    int version = (payload[0] &gt;&gt; 6) &amp; 0x03;  \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0435 2 \u0431\u0438\u0442\u0430    int pt = payload[1] &amp; 0x7F;               \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0435 7 \u0431\u0438\u0442 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><strong>version<\/strong> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c 2 (\u0432\u0441\u0435\u0433\u0434\u0430, \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e RTP)<\/p>\n<\/li>\n<li>\n<p><strong>pt<\/strong> (Payload Type): 0\u202634 \u2014 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u043a\u043e\u0434\u0435\u043a\u0438 (PCMU, GSM, Opus\u2026), 200\u2026207 \u2014 \u043f\u0430\u043a\u0435\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (RTCP)<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">    if (version == 2 &amp;&amp; pt &lt;= 34)        return DPI_PROTO_RTP;       \/\/ \u0413\u043e\u043b\u043e\u0441 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e    if (version == 2 &amp;&amp; pt &gt;= 200 &amp;&amp; pt &lt;= 207)        return DPI_PROTO_RTCP;      \/\/ \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>RTP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 <strong>\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0440\u0442\u0430\u0445<\/strong>\u00a0\u2014 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u0438\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0437\u0432\u043e\u043d\u043a\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0440\u0442 \u043d\u0435\u00a0\u043f\u043e\u043c\u043e\u0436\u0435\u0442\u00a0\u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<hr\/>\n<h3>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432: \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c<\/h3>\n<blockquote>\n<p><em>\u2014 \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0432\u044b \u044d\u0442\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e? \u0412\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0412\u0421\u0401, \u0447\u0442\u043e\u00a0\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b?!<\/em> <em>\u2014 \u0423\u00a0\u043c\u0435\u043d\u044f \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c.<\/em><\/p>\n<\/blockquote>\n<p>\u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442. \u041d\u043e\u00a0\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0442\u044b\u0441\u044f\u0447\u0438\u00a0\u2014 \u043a\u0430\u043a\u00a0\u043d\u0435\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443?<\/p>\n<h4>\u0427\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 \u00ab\u043f\u043e\u0442\u043e\u043a\u00bb<\/h4>\n<p><strong>\u041f\u043e\u0442\u043e\u043a<\/strong> (flow)\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f <strong>5-\u043a\u043e\u0440\u0442\u0435\u0436\u0435\u043c<\/strong> (5-tuple):<\/p>\n<ol>\n<li>\n<p><strong>src_ip<\/strong>\u00a0\u2014 IP\u2011\u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p><strong>dst_ip<\/strong>\u00a0\u2014 IP\u2011\u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p><strong>src_port<\/strong>\u00a0\u2014 \u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p><strong>dst_port<\/strong>\u00a0\u2014 \u043f\u043e\u0440\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/li>\n<li>\n<p><strong>ip_proto<\/strong>\u00a0\u2014 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b (TCP = 6, UDP = 17)<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e 5? \u041c\u0435\u043d\u044c\u0448\u0435\u00a0\u2014 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u0434\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u043e\u0434\u0438\u043d IP\/\u043f\u043e\u0440\u0442 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043e\u0442\u043b\u0438\u0447\u0438\u043c\u044b. \u0411\u043e\u043b\u044c\u0448\u0435\u00a0\u2014 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e: \u044d\u0442\u0438\u0445 \u043f\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<h4>\u041a\u0430\u043d\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f: A\u2192B = B\u2192A<\/h4>\n<p>\u0412\u00a0\u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0434\u0443\u0442 \u0432\u00a0\u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0417\u0430\u043f\u0440\u043e\u0441\u00a0\u2014 A\u2192B, \u043e\u0442\u0432\u0435\u0442\u00a0\u2014 B\u2192A. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e 5-\u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0440\u0430\u0437\u043d\u044b\u0435\u00a0\u2014 IP \u0438 \u043f\u043e\u0440\u0442\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b. \u041d\u043e\u00a0\u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0434\u0438\u0430\u043b\u043e\u0433!<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: <strong>\u043a\u0430\u043d\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f<\/strong>\u00a0\u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443. (\u041f\u0443\u0441\u0442\u044c \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u00a0\u2014 \u0437\u0430\u0442\u043e \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e!) IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u00a0\u0447\u0438\u0441\u043b\u0430, \u043c\u0435\u043d\u044c\u0448\u0435\u0435\u00a0\u2014 \u043d\u0430\u00a0\u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code class=\"cpp\">if (ntohl(src_ip) &gt; ntohl(dst_ip)) {    \/\/ \u041c\u0435\u043d\u044f\u0435\u043c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 src \u0438 dst}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c A\u2192B \u0438 B\u2192A \u2192 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u2192 \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<h4>\u0425\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430<\/h4>\n<p>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <strong>\u0445\u044d\u0448\u2011\u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/strong>. \u0418\u0434\u0435\u044f: \u0438\u0437\u00a0\u043a\u043b\u044e\u0447\u0430 (5-\u043a\u043e\u0440\u0442\u0435\u0436\u0430) \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0447\u0438\u0441\u043b\u043e\u00a0\u2014 <strong>\u0445\u044d\u0448<\/strong>\u00a0\u2014 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a\u00a0\u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0435.<\/p>\n<pre><code class=\"cpp\">static uint32_t flow_hash(const dpi_5tuple_t *t) {    uint32_t h = t-&gt;src_ip;    h ^= t-&gt;dst_ip;    h ^= (t-&gt;src_port &lt;&lt; 16) | t-&gt;dst_port;    h ^= t-&gt;ip_proto;    \/\/ \u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 (Murmur-like finalizer)    h = ((h &gt;&gt; 16) ^ h) * 0x45d9f3b;    h = ((h &gt;&gt; 16) ^ h) * 0x45d9f3b;    h = (h &gt;&gt; 16) ^ h;    return h % DPI_FLOW_TABLE_SIZE;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0425\u044d\u0448\u2011\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00ab\u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u00bb \u0431\u0438\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438\u0441\u044c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e. \u0411\u0435\u0437\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438\u0435 IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043a\u0443\u0447\u0438\u0432\u0430\u043b\u0438\u0441\u044c\u00a0\u0431\u044b \u0432\u00a0\u043e\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\u00a0\u2014 <strong>65537<\/strong>. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u00ab\u043a\u0440\u0443\u0433\u043b\u043e\u0435\u00bb 65536? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e 65\u00a0537\u00a0\u2014 <strong>\u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/strong>. \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\u00a0\u2014 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438, \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u0445\u044d\u0448\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u044f\u0447\u0435\u0439\u043a\u0443, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043a\u0443\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043a\u043e\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044f\u0445 \u0432\u00a0\u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442. (\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043f\u043e\u0434\u0430\u0440\u0438\u043b \u0434\u0435\u0434\u0443\u0448\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0414\u043e\u043d\u0430\u043b\u044c\u0434 \u041a\u043d\u0443\u0442.)<\/p>\n<p><strong>\u041a\u043e\u043b\u043b\u0438\u0437\u0438\u0438<\/strong> (\u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0430 \u2192 \u043e\u0434\u0438\u043d \u0445\u044d\u0448) \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u044b\u00a0\u2014 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 65\u00a0537\u00a0\u044f\u0447\u0435\u0435\u043a \u0431\u0435\u0437\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439. \u041a\u043e\u043b\u043b\u0438\u0437\u0438\u044e \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u043c\u0438: \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430\u00a0\u2014 \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u00a0\u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<hr\/>\n<h3>\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/h3>\n<blockquote>\n<p><em>\u2014 \u041c\u043e\u0436\u043d\u043e \u043c\u043d\u0435 \u0442\u043e\u0436\u0435?<\/em> <em>\u2014 \u041a\u043e\u043d\u0435\u0447\u043d\u043e! \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f\u2026<\/em><\/p>\n<\/blockquote>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c. \u041f\u0440\u0438\u043c\u0435\u0440: \u0434\u043e\u0431\u0430\u0432\u0438\u043c MQTT\u00a0\u2014 \u043b\u0451\u0433\u043a\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0434\u043b\u044f \u00ab\u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432\u0435\u0449\u0435\u0439\u00bb (\u043f\u043e\u0440\u0442 1883, \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 <code>0x10<\/code>).<\/p>\n<p><strong>1. Enum<\/strong> \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<pre><code>DPI_PROTO_MQTT,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>2. \u0418\u043c\u044f<\/strong> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>{DPI_PROTO_MQTT, \"MQTT\"},<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>3. \u041f\u043e\u0440\u0442<\/strong> &#8212; \u0444\u043e\u043b\u0431\u044d\u043a:<\/p>\n<pre><code class=\"cpp\">if (dst == 1883 || src == 1883) return DPI_PROTO_MQTT;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>4. Payload-\u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430<\/strong>:<\/p>\n<pre><code class=\"cpp\">if (payload_len &gt;= 2 &amp;&amp; (payload[0] &amp; 0xF0) == 0x10)    return DPI_PROTO_MQTT;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>5. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/strong> \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u0435:<\/p>\n<pre><code>MQTT: \\x10<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u043b\u0438\u00a0\u2014 \u0438 MQTT\u2011\u0442\u0440\u0430\u0444\u0438\u043a \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f. \u0410\u0445\u043e\u2011\u041a\u043e\u0440\u0430\u0441\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442 trie \u043f\u043e\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435.<\/p>\n<hr\/>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<blockquote>\n<p><em>\u2014 \u041d\u0443 \u0438 \u043a\u0430\u043a? \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c?<\/em> <em>\u2014 \u0411\u043e\u043b\u0435\u0435\u2011\u043c\u0435\u043d\u0435\u0435.<\/em> <em>\u2014 \u00ab\u0411\u043e\u043b\u0435\u0435\u2011\u043c\u0435\u043d\u0435\u0435\u00bb\u00a0\u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u043b\u0438\u00a0\u043f\u043b\u043e\u0445\u043e?<\/em><\/p>\n<\/blockquote>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c Wi-Fi-\u0442\u0440\u0430\u0444\u0438\u043a\u0435 (1000 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0431\u044b\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c):<\/p>\n<pre><code>=== DPI Statistics ===Total packets:   987Total bytes:     816543Classified:      944Unclassified:    43Active flows:    49Classification:  95.6%Per-protocol breakdown:  HTTP       16  HTTPS      898  DNS        20  TLS        10<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>95.6% \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/strong> \u0414\u043b\u044f\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f: \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (nDPI, PACE) \u0434\u0430\u044e\u0442 97\u201399%. \u041d\u0430\u0448 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u043f\u043b\u043e\u0445 \u0434\u043b\u044f\u00a0\u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 ~500\u00a0\u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u043a\u043e\u0434\u0430\u00a0\u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u00ab\u043f\u043e\u0442\u0435\u0440\u044f\u00bb \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u0445.<\/p>\n<p>HTTPS \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u00a0\u2014 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. HTTP\u00a0\u2014 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. DNS\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0451\u043d.<\/p>\n<p>43\u00a0\u043d\u0435\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u00a0\u2014 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u0445 (\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b, VPN) \u0438 ICMP (ping).<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b):<\/p>\n<pre><code>SRC IP              PORT   -&gt; DST IP              PORT   PROTO    PACKETS   BYTES10.0.0.1            53     -&gt; 192.168.1.100      46116  DNS            2       22193.184.216.34       443    -&gt; 192.168.1.100      49526  HTTPS          7       34393.184.216.34       80     -&gt; 192.168.1.100      42986  HTTP          12      2207140.82.121.4        443    -&gt; 192.168.1.100      49054  HTTPS         28     14127198.51.100.1        9000   -&gt; 192.168.1.100      36768  TLS           13      5207<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 <strong>9000<\/strong> \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a TLS, \u0430 \u043d\u0435 HTTP. \u041f\u043e\u0440\u0442 9000 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 TLS\u00a0\u2014 \u043d\u043e\u00a0\u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f payload \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430 \u0431\u0430\u0439\u0442\u044b <code>0x16 0x03 0x01<\/code> (TLS Handshake) \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b. \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e DPI \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e firewall\u2019\u0430.<\/p>\n<hr\/>\n<h3>\u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440<\/h3>\n<p>\u0411\u0430\u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u00a0\u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b. \u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u00a0\u2014 \u043e\u0434\u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430:<\/p>\n<pre><code># HTTPHTTP: GET HTTP: POST HTTP: HTTP\/1.0# SSHSSH: SSH-2.0SSH: SSH-1.99# TLS (\u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \\xHH)TLS: \\x16\\x03\\x01TLS: \\x16\\x03\\x02# SIPSIP: INVITE SIP: BYE SIP: SIP\/2.0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442: <code>\u041f\u0420\u041e\u0422\u041e\u041a\u041e\u041b: \u0448\u0430\u0431\u043b\u043e\u043d<\/code>. \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b\u00a0\u2014 \u043a\u0430\u043a\u00a0\u0435\u0441\u0442\u044c, \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 <code>\\xHH<\/code>. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443\u00a0\u2014 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0444\u0430\u0439\u043b\u0435, \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<hr\/>\n<h3>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h3>\n<blockquote>\n<p><em>\u2014 \u042d\u0442\u043e \u0432\u0441\u0451?<\/em> <em>\u2014 \u042d\u0442\u043e \u041c\u041e\u0413\u041b\u041e\u00a0\u0411\u042b\u0422\u042c \u0432\u0441\u0451.<\/em><\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 <strong>\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/strong> \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p><strong>IPv6<\/strong>\u00a0\u2014 \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 (40\u00a0\u0431\u0430\u0439\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u043d\u0435\u0442 IHL)<\/p>\n<\/li>\n<li>\n<p><strong>IP\u2011\u0434\u0435\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/strong>\u00a0\u2014 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e; \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 TCP\/UDP\u2011\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/p>\n<\/li>\n<li>\n<p><strong>TCP reassembly<\/strong>\u00a0\u2014 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043d\u0435\u00a0\u0441\u043a\u043b\u0435\u0438\u0432\u0430\u044e\u0442\u0441\u044f; HTTP\u2011\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0439 \u043d\u0430\u00a0\u0434\u0432\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d<\/p>\n<\/li>\n<li>\n<p><strong>\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a<\/strong>\u00a0\u2014 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 TLS \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435<\/p>\n<\/li>\n<li>\n<p><strong>ML\u2011\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/strong>\u00a0\u2014 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0435 DPI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 (\u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438); \u0443\u00a0\u043d\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0438 \u043f\u043e\u0440\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437\u00a0\u044d\u0442\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432\u00a0\u2014 \u0442\u0435\u043c\u0430 \u0434\u043b\u044f\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0418\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e pull request\u2019\u0430.<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<blockquote>\n<p><em>\u2014 \u0418 \u0447\u0442\u043e\u00a0\u0442\u0435\u043f\u0435\u0440\u044c?<\/em> <em>\u2014 \u0410\u00a0\u0432\u043e\u0442 \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/em><\/p>\n<\/blockquote>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u0440\u044b\u0442: <a href=\"https:\/\/gitflic.ru\/project\/wirewalk\/tiny-dpi-engine\" rel=\"noopener noreferrer nofollow\">gitflic.ru\/project\/wirewalk\/tiny\u2011dpi\u2011engine<\/a>. <br \/>\u0417\u0435\u0440\u043a\u0430\u043b\u043e: <a href=\"https:\/\/github.com\/wirewalk\/tiny-dpi-engine\" rel=\"noopener noreferrer nofollow\">github.com\/wirewalk\/tiny\u2011dpi\u2011engine<\/a>. <br \/>Pull request&#8217;\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>IPv6<\/strong>\u00a0\u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><strong>TCP reassembly<\/strong>\u00a0\u2014 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><strong>JSON\u2011\u0432\u044b\u0432\u043e\u0434<\/strong>\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430<\/p>\n<\/li>\n<li>\n<p><strong>REST API<\/strong>\u00a0\u2014 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438<\/strong>\u00a0\u2014 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u00a0nDPI \u043f\u043e\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<p><strong>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430\u00a0\u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u00a9.<\/strong> \u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u00a0\u2014 \u043b\u0430\u0439\u043a, \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. \u0412\u043e\u043f\u0440\u043e\u0441\u044b, \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u0438\u0434\u0435\u0438?\u00a0\u2014 \u041a\u0440\u0443\u0442\u043e, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0441 \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1068394\/\">https:\/\/habr.com\/ru\/articles\/1068394\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0414\u0432\u0438\u0436\u043e\u043a \u043d\u0430 C: \u043e\u0442 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432\u041c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u0431\u0435\u0433\u0430\u044e\u0442 \u043f\u043e\u00a0\u043c\u043e\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438. \u042f \u043d\u0435\u00a0\u043d\u0430\u0448\u0451\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u00a0\u0432\u0435\u0447\u0435\u0440 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043e\u0442\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430\u00a0\u2014 \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439, \u043d\u0430\u00a0C. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Deep Packet Inspection.\u041a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u042d\u043f\u0438\u0433\u0440\u0430\u0444\u044b \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c\u00a0\u2014 \u0446\u0438\u0442\u0430\u0442\u044b \u0438\u0437\u00a0\u043c\u0443\u043b\u044c\u0442\u0438\u043a\u0430 \u00ab\u0428\u0440\u0435\u043a\u00bb. (\u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u044f\u00a0\u0431\u044b\u043b \u0444\u0430\u043d\u0430\u0442, \u043d\u043e\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f.) (\u042d\u0439, \u0435\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f \u0447\u0442\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0446\u0438\u0442\u0430\u0442 \u0434\u043b\u044f\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u2014 \u044f \u043e\u0442\u043a\u0440\u044b\u0442 \u043a\u00a0\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c!)\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 DPI \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d\u2014 \u0422\u0430\u043c \u0442\u0430\u043a \u0442\u0435\u043c\u043d\u043e \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u043e! \u2014 \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0435. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e.\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0441\u0430\u0439\u0442, \u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0442\u043d\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442 \u0441\u00a0\u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u043d\u0430\u00a0\u043e\u0431\u043b\u043e\u0436\u043a\u0435 (IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b) \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0432\u043d\u0443\u0442\u0440\u0438.Payload (\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430)\u00a0\u2014 \u044d\u0442\u043e \u00ab\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u00bb. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b)\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u043d\u0430\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u00bb.\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u0438\u043b\u0438\u00a0firewall \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043d\u0430\u0434\u043f\u0438\u0441\u0438: \u00ab\u043f\u043e\u0440\u0442 80\u00a0\u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043f\u043e\u0440\u0442 25\u00a0\u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u00bb. \u041d\u043e\u00a0\u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043a\u0442\u043e\u2011\u0442\u043e \u043a\u0440\u0443\u0442\u0438\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 443\u00a0(\u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u044f\u0442 HTTPS)? \u041f\u043e\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0443 \u043d\u0435\u00a0\u043e\u0442\u043b\u0438\u0447\u0438\u0448\u044c\u00a0\u2014 \u043e\u0431\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e.Deep Packet Inspection (DPI, \u00ab\u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb)\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0438. \u041f\u043e\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043f\u043e\u0440\u0442\u0430.\u0413\u0434\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f:\u0441\u0430\u043c\u0438\u2011\u0437\u043d\u0430\u0435\u0442\u0435\u2011\u0433\u0434\u0435\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0435\u0442\u0438: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433, \u043d\u0435\u00a0\u0442\u0440\u043e\u0433\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u0432\u044f\u0437\u0438: \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0441 (VoIP) \u043d\u0430\u0434 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (IDS\/IPS): \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433: \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430\u00a0\u2014 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e, \u043a\u0430\u043a\u043e\u0439\u00a0\u2014 DNS\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0440\u0435\u043b\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f: nDPI, L7-filter, libprotoident. \u0417\u0430\u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0451? \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u00a0\u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u0432\u043e\u043f\u0440\u043e\u0441\u0435.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u0432\u0438\u0436\u043e\u043a\u2014 \u041e\u043a\u0435\u0439, \u044d\u2011\u044d\u2026 \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u043d\u0430\u0447\u0430\u043b\u0430? \u2014 \u0414\u0430, \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u043d\u0430\u0447\u0430\u043b\u0430.\u041d\u0430\u0448 DPI\u2011\u0434\u0432\u0438\u0436\u043e\u043a\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0443\u044e \u043b\u0435\u043d\u0442\u0443: \u043d\u0430\u00a0\u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u044b\u0440\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442, \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0434\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435\u00a0\u2014 \u00ab\u044d\u0442\u0438\u043a\u0435\u0442\u043a\u0430\u00bb \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502   \u0417\u0430\u0445\u0432\u0430\u0442    \u2502\u2500\u2500\u2500&gt;\u2502  \u0420\u0430\u0437\u0431\u043e\u0440   \u2502\u2500\u2500\u2500&gt;\u2502  \u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u2502\u2500\u2500\u2500&gt;\u2502    \u0422\u0430\u0431\u043b\u0438\u0446\u0430   \u2502\u2502  (libpcap)  \u2502    \u2502  \u043f\u0430\u043a\u0435\u0442\u043e\u0432  \u2502    \u2502  \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432    \u2502    \u2502    \u043f\u043e\u0442\u043e\u043a\u043e\u0432   \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u0427\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0430\u0434\u0438\u0438:\u0417\u0430\u0445\u0432\u0430\u0442\u00a0\u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u044b\u0440\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0438\u0437\u00a0\u0441\u0435\u0442\u0438\u0420\u0430\u0437\u0431\u043e\u0440\u00a0\u2014 \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u00ab\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u00bb: \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c IP\u2011\u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0440\u0442\u044b, payload\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u00a0\u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u043e\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043f\u043e\u0440\u0442\u043e\u0432\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u00a0\u2014 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0417\u0430\u0447\u0435\u043c \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u0441\u0442\u0430\u0434\u0438\u044f? \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435: \u0432\u044b \u043e\u0431\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u00a0\u0441\u0430\u0439\u0442\u043e\u043c. \u042d\u0442\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u00a0\u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0442\u0443\u0434\u0430\u2011\u0441\u044e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u043e\u00a0\u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0443, \u043d\u0435\u0437\u0430\u0447\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e.\u041f\u043e\u0442\u043e\u043a (flow)\u00a0\u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u00a0\u043f\u044f\u0442\u0438 \u043f\u043e\u043b\u044f\u043c: src_ip, dst_ip, src_port, dst_port, ip_proto. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u044f\u0442\u044c\u00a0\u2014 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f stateful\u2011\u043f\u043e\u0434\u0445\u043e\u0434 (\u00ab\u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u00bb).\u0417\u0430\u0445\u0432\u0430\u0442 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u0435\u0442\u044c\u2014 \u042d\u2011\u044d\u2026 \u043c\u044b \u0442\u043e\u0447\u043d\u043e \u0442\u0443\u0434\u0430 \u0438\u0434\u0451\u043c? \u2014 \u041a\u043e\u043d\u0435\u0447\u043d\u043e!.. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435.\u0412\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0441\u0432\u043e\u0438\u00bb\u00a0\u2014 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 HTTP, \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0441\u0432\u043e\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041d\u043e\u00a0\u0434\u043b\u044f\u00a0DPI \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443.\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 promiscuous mode (\u00ab\u043d\u0435\u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\u00bb). \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u00a0\u0435\u0439. \u0412\u00a0promiscuous mode \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u041e\u0421 \u0432\u0441\u0451, \u0447\u0442\u043e \u00ab\u0441\u043b\u044b\u0448\u0438\u0442\u00bb\u00a0\u2014 \u0438 \u0447\u0443\u0436\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0442\u043e\u0436\u0435.libpcap\u00a0\u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0Linux, macOS, *BSD, \u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u041e\u0421.\u0414\u043b\u044f\u00a0\u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0430\u0432\u0430 root (sudo)\u00a0\u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u041e\u0421. (\u041d\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a.)pcap_t *handle = pcap_open_live(&#171;eth0&#187;, 65535, 1, 1000, errbuf);\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (&#171;eth0&#187; \u2014 \u0438\u043c\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b), \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 (65535 \u2014 \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0431\u0440\u0435\u0437\u0430\u0442\u044c), promiscuous mode (1 = \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c), \u0442\u0430\u0439\u043c\u0430\u0443\u0442 (1000 \u043c\u0441).\u041a\u043e\u0433\u0434\u0430 libpcap \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u043f\u0430\u043a\u0435\u0442, \u043e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0\u2014 callback. Callback\u00a0\u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u043f\u0440\u0438\u00a0\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.void callback(unsigned char *user, const struct pcap_pkthdr *h,              const unsigned char *bytes) {    dpi_parsed_packet_t pkt;    dpi_parse_packet(bytes, h-&gt;caplen, &amp;pkt);  \/\/ \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442    dpi_classify(ac, &amp;pkt, flow_table, stats);  \/\/ \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c}bytes &#8212; \u0441\u044b\u0440\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. h-&gt;caplen &#8212; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043e.\u041f\u043e\u0447\u0435\u043c\u0443 libpcap, \u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e? \u041d\u0430 Linux \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f AF_PACKET, \u043d\u0430\u00a0macOS\u00a0\u2014 BPF, \u043d\u0430\u00a0FreeBSD\u00a0\u2014 \/dev\/bpf. libpcap \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u00a0\u2014 \u043e\u0434\u0438\u043d \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0437\u00a0pcap\u2011\u0444\u0430\u0439\u043b\u043e\u0432\u00a0\u2014 \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0442\u043b\u0430\u0434\u043a\u0438.\u041a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442\u2014 \u041e\u0433\u0440\u044b\u00a0\u2014 \u043e\u043d\u0438 \u043a\u0430\u043a\u00a0\u043b\u0443\u043a! \u0423\u00a0\u043d\u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0451\u0432! \u2014 \u0412\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043d\u0435\u00a0\u0432\u0441\u0435 \u043b\u044e\u0431\u044f\u0442 \u043b\u0443\u043a!\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c. \u0412\u043e\u0442 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 hex-\u0434\u0430\u043c\u043f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430:ff ff ff ff ff ff   00 11 22 33 44 55   08 00^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^   ^^^^^dst MAC (6 \u0431\u0430\u0439\u0442)   src MAC (6 \u0431\u0430\u0439\u0442)    ethertype: 0x0800 = IPv4                    &lt;- 14 \u0431\u0430\u0439\u0442 = Ethernet-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;45 00 00 2e  00 01 00 00  40 06 ?? ??  c0 a8 01 01  c0 a8 01 02^            ^            ^  ^          ^^^^^^^^^^^   ^^^^^^^^^^^ver=4,       \u0434\u043b\u0438\u043d\u0430        TTL, TCP     src:          dst:IHL=5 (20 \u0431) \u0432\u0441\u0435\u0433\u043e        proto=6      192.168.1.1   192.168.1.2                    &lt;- 20 \u0431\u0430\u0439\u0442 = IPv4-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;04 01  00 50  00 00 00 01  00 00 00 00  50 02 ?? ??  ?? ??^^^^   ^^^^                                             ^^^^^^^^src:    dst:  seq                  data offset=5      window,49121   80                         (20 \u0431\u0430\u0439\u0442)          checksum                    &lt;- 20 \u0431\u0430\u0439\u0442 = TCP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a -&gt;47 45 54 20 2f 69 6e 64 65 78 2e 68 74 6d 6c 20 48 54 54 50 &#8230;G  E  T  _  \/  i  n  d  e  x  .  h  t  m  l  _  H  T  T  P &#8230;                    &lt;- payload: &#171;GET \/index.html HTTP&#8230;&#187; -&gt;\u0412\u0438\u0434\u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443: \u0442\u0440\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 (Ethernet, IP, TCP)\u00a0\u2014 \u0438 payload. \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0430\u00bb: \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439.| Ethernet (14 \u0431\u0430\u0439\u0442) | IPv4 (20+ \u0431\u0430\u0439\u0442) | TCP (20+ \u0431\u0430\u0439\u0442) |      Payload      |\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0442\u043e\u0436\u0435 \u043b\u044e\u0431\u0438\u043b\u0438 \u043b\u0443\u043a \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441\u043e \u0441\u043b\u043e\u044f\u043c\u0438\u00a0\u2014 \u043c\u043e\u0434\u0435\u043b\u044c OSI \u044d\u0442\u043e \u043a\u0430\u043a\u00a0\u0440\u0430\u0437 \u0442\u0430\u043a\u0438 7\u00a0\u0441\u043b\u043e\u0451\u0432. \u041d\u043e\u00a0\u043d\u0430\u043c \u0434\u043b\u044f\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e DPI \u0445\u0432\u0430\u0442\u0438\u0442 \u0447\u0435\u0442\u044b\u0440\u0451\u0445.\u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e.\u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432: \u0441\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u043b\u043e\u0438 \u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0438\u2014 \u042d\u0442\u043e \u0447\u0442\u043e, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043a\u0440\u043e\u0432\u044c? \u2014 \u041d\u0443\u2026 \u044d\u0442\u043e \u043d\u0435\u00a0\u041d\u0410\u0428\u0410 \u043a\u0440\u043e\u0432\u044c.\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0439\u0442\u043e\u0432: \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0451 \u00ab\u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u00bb\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\u00a0\u2014 \u043e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c. \u0412\u00a0\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u043c\u043d\u043e\u0433\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:Little-endian (x86, ARM): \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0432\u044b\u043c. \u0427\u0438\u0441\u043b\u043e 0x1234 -&gt; \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 34 12Big-endian (\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a): \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0432\u044b\u043c. \u0422\u043e \u0436\u0435 \u0447\u0438\u0441\u043b\u043e -&gt; 12 34\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 big\u2011endian\u00a0\u2014 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f network byte order. \u0410\u00a0\u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, little\u2011endian. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u00a0\u0447\u0442\u0435\u043d\u0438\u0438 \u0447\u0438\u0441\u0435\u043b \u0438\u0437\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u00ab\u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u00bb \u0431\u0430\u0439\u0442\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u044f ntohs()\u00a0\u2014 network to host short\u00a0\u2014 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e:uint16_t ethertype = ntohs(out-&gt;eth-&gt;ethertype);  \/\/ &#171;\u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c&#187; 2 \u0431\u0430\u0439\u0442\u0430\u0417\u0430\u0431\u044b\u043b\u0438 ntohs\u00a0\u2014 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 0x0800 (IPv4) \u043a\u0430\u043a 0x0008 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442\u0435. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.Ethernet \u2192 IPint dpi_parse_packet(const uint8_t *raw, size_t raw_len,                     dpi_parsed_packet_t *out) {    const uint8_t *ptr = raw;          \/\/ \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435    const uint8_t *end = raw + raw_len; \/\/ \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0443\u0444\u0435\u0440\u0430    \/* Ethernet: 14 \u0431\u0430\u0439\u0442 &#8212; dst_mac(6) + src_mac(6) + ethertype(2) *\/    if (raw_len &lt; 14) return -1;        \/\/ \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 &#8212; \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c    out-&gt;eth = (const dpi_eth_header_t *)ptr;    uint16_t ethertype = ntohs(out-&gt;eth-&gt;ethertype);    ptr += 14;                          \/\/ \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 14 \u0431\u0430\u0439\u0442\u041c\u044b \u0431\u0435\u0440\u0451\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u00a0\u043d\u0430\u0447\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u0430\u0441\u0442\u0443\u0435\u043c \u0435\u0433\u043e \u043a\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. Cast (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430)\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443: \u00ab\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0439 \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u044b \u043a\u0430\u043a\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u00a0\u0442\u0430\u043a\u0438\u043c\u0438\u2011\u0442\u043e \u043f\u043e\u043b\u044f\u043c\u0438\u00bb. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u0442\u0435\u00a0\u0436\u0435 \u0431\u0430\u0439\u0442\u044b \u00ab\u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0447\u043a\u0438\u00bb.\u041f\u043e\u043b\u0435 ethertype (2\u00a0\u0431\u0430\u0439\u0442\u0430) \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e\u00a0\u0432\u043d\u0443\u0442\u0440\u0438:0x0800\u00a0\u2014 IPv4\u00a0(\u0442\u043e \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e)0x86DD\u00a0\u2014 IPv6\u00a0(\u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c)0x8100\u00a0\u2014 VLAN\u2011\u0442\u0435\u0433 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435)\u0415\u0441\u043b\u0438 \u043d\u0435\u00a0IPv4\u00a0\u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442.VLAN: \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0441\u0435\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u0418\u043d\u043e\u0433\u0434\u0430\u00a0\u043e\u0434\u0438\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0430\u0431\u0435\u043b\u044c (\u0438\u043b\u0438 Wi\u2011Fi) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439\u00a0\u2014 VLAN (Virtual LAN). \u0412\u00a0\u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u00a0\u043a\u0430\u0434\u0440 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f 4\u00a0\u0431\u0430\u0439\u0442\u0430\u00a0\u2014 \u00ab\u0431\u0438\u0440\u043a\u0430\u00bb \u0441\u00a0\u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438:| Ethernet (12 \u0431\u0430\u0439\u0442) | VLAN-\u0442\u0435\u0433 (4 \u0431\u0430\u0439\u0442\u0430) | \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 ethertype | \u0434\u0430\u043d\u043d\u044b\u0435&#8230; |\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c: \u0435\u0441\u043b\u0438 ethertype = 0x8100\u00a0\u2014 \u0434\u0430\u043b\u044c\u0448\u0435 VLAN\u2011\u0442\u0435\u0433, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c 4\u00a0\u0431\u0430\u0439\u0442\u0430 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 ethertype:if (ethertype == 0x8100) {    if (ptr + 4 &gt; end) return -1;    ethertype = read_u16_be(ptr + 2);    ptr += 4;}IP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043aout-&gt;ip = (const dpi_ip_header_t *)ptr;uint8_t ihl = (out-&gt;ip-&gt;version_ihl &amp; 0x0F) * 4;\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e.\u041f\u043e\u043b\u0435 version_ihl\u00a0\u2014 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u00ab\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b\u00bb \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:\u0431\u0438\u0442\u044b:  7  6  5  4 | 3  2  1  0       \u0432\u0435\u0440\u0441\u0438\u044f IP  |    IHL       (= 4)      | (= 5 \u043e\u0431\u044b\u0447\u043d\u043e)\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u00ab\u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c\u00bb \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &amp; (\u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418) \u0441\u00a0\u043c\u0430\u0441\u043a\u043e\u0439 0x0F (0000 1111) \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u00a0\u2014 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430, \u043e\u0431\u043d\u0443\u043b\u044f\u044f \u0441\u0442\u0430\u0440\u0448\u0438\u0435:version_ihl = 0x45  = 0100 0101mask         = 0x0F  = 0000 1111\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442    = 0x05  = 0000 0101  &lt;- IHL = 5\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 4\u00a0\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u0437 \u00ab32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u00bb \u0432\u00a0\u0431\u0430\u0439\u0442\u044b: IHL=5\u00a0\u2192 20\u00a0\u0431\u0430\u0439\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c, \u043d\u043e\u00a0\u0441\u00a0\u043e\u043f\u0446\u0438\u044f\u043c\u0438 IP\u00a0\u2014 \u0434\u043e 60.TCP: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044bTCP \u0441\u043b\u043e\u0436\u043d\u0435\u0435 UDP: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u00a0\u2014 \u043e\u0442 20\u00a0\u0434\u043e 60\u00a0\u0431\u0430\u0439\u0442. \u0414\u043b\u0438\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u043f\u043e\u043b\u0435 Data Offset\u00a0\u2014 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4\u00a0\u0431\u0438\u0442\u0430&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-490311","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=490311"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490311\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=490311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=490311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=490311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}