{"id":458480,"date":"2025-05-03T15:00:09","date_gmt":"2025-05-03T15:00:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=458480"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=458480","title":{"rendered":"<span>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u041f\u041e. \u0414\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u043e\u0432 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bbf\/ec9\/0e7\/bbfec90e7ee82591c96b7fe24364e486.png\" width=\"1024\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bbf\/ec9\/0e7\/bbfec90e7ee82591c96b7fe24364e486.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bbf\/ec9\/0e7\/bbfec90e7ee82591c96b7fe24364e486.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439! \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c \u0438 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0432 \u0441\u0444\u0435\u0440\u0435 \u0418\u0411. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c 3 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u043e\u0434\u043d\u0443 \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0418\u0418 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432 \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u043e\u0432 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u041d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e\u0442 \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439.<\/strong><\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 \u042f\u041f Python. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u044b\u0435 \u0445\u043e\u0441\u0442\u044b \u043d\u0430 \u0441\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b, \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u0438\u0441\u043a CVE \u043f\u043e\u0434 \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u0432 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u0421\u041d\u0413, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0418\u0418 \u0432\u043e\u0437\u044c\u043c\u0451\u043c: ChatGPT, Perplexity, DeepSeek \u0438 Together.<\/p>\n<h2>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u044b \u043a \u043d\u0438\u043c<\/h2>\n<p>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u041d\u0430\u043f\u0438\u0448\u0438 \u043d\u0430 python \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0440\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u041f\u041e\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u044c \u043f\u043e\u0438\u0441\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443\u201d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u041d\u0430\u043f\u0438\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430 \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0442\u044f\u043c \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0421\u041d\u0413\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443\u201d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u0435.<\/p>\n<h2>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 GodMode<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c GodMode, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 Chromium \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 <code>npm<\/code>:<\/p>\n<pre><code>git clone https:\/\/github.com\/smol-ai\/GodMode.git cd GodMode npm install --force npm run start<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a1\/e53\/5ce\/6a1e535cedf4fd2bf2ad74b164133d61.png\" width=\"2750\" height=\"1650\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6a1\/e53\/5ce\/6a1e535cedf4fd2bf2ad74b164133d61.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6a1\/e53\/5ce\/6a1e535cedf4fd2bf2ad74b164133d61.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u0422\u0435\u0441\u0442 ChatGPT<\/h2>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430<\/h3>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1eb\/3f2\/d9a\/1eb3f2d9a1186b6176fcbf33bc6692ab.png\" width=\"460\" height=\"293\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1eb\/3f2\/d9a\/1eb3f2d9a1186b6176fcbf33bc6692ab.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1eb\/3f2\/d9a\/1eb3f2d9a1186b6176fcbf33bc6692ab.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u041f\u043e\u043c\u0438\u043c\u043e IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf2\/814\/acb\/bf2814acb9cb763bcd4f2ee6031dc384.png\" width=\"699\" height=\"655\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bf2\/814\/acb\/bf2814acb9cb763bcd4f2ee6031dc384.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf2\/814\/acb\/bf2814acb9cb763bcd4f2ee6031dc384.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u0432\u0438\u0434\u043d\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0430 \u043d\u0438\u0445. \u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043a\u043e\u0434 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 80\u043e\u043c \u043f\u043e\u0440\u0442\u0443. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432(Bad Request\/ready), \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0443.<\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e00\/148\/b98\/e00148b985a1259149d99ed2a872cf35.png\" width=\"706\" height=\"726\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e00\/148\/b98\/e00148b985a1259149d99ed2a872cf35.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e00\/148\/b98\/e00148b985a1259149d99ed2a872cf35.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0430\u0445 \u044d\u0442\u0430 \u0431\u0430\u0437\u0430 \u043d\u0435 \u0434\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<pre><code>#!\/usr\/bin\/env python3  import ipaddress import subprocess import concurrent.futures import argparse import socket import platform  # \ud83d\udd10 \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 VULNERABILITIES = {     \"apache\/2.4.49\": [\"CVE-2021-41773\", \"CVE-2021-42013\"],     \"nginx\/1.18.0\": [\"CVE-2021-23017\"],     \"openssh_7.2p2\": [\"CVE-2016-0777\"],     \"mysql 5.7.29\": [\"CVE-2020-2574\"],     \"proftpd 1.3.5\": [\"CVE-2019-12815\"],     \"vsftpd 2.3.4\": [\"CVE-2011-2523\"] }  def banner():     print(\"=\"*60)     print(\"     \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 CVE\")     print(\"=\"*60)  def is_host_alive(ip):     try:         param = \"-n\" if platform.system().lower() == \"windows\" else \"-c\"         result = subprocess.run(             [\"ping\", param, \"1\", \"-W\", \"1\", str(ip)],             stdout=subprocess.DEVNULL,             stderr=subprocess.DEVNULL         )         return ip if result.returncode == 0 else None     except Exception:         return None  def grab_banner(ip, port):     try:         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:             s.settimeout(1)             s.connect((str(ip), port))             s.sendall(b\"\\r\\n\")             banner = s.recv(1024).decode(errors=\"ignore\").strip()             return banner     except:         return \"\"  def scan_port(ip, port):     try:         with socket.socket() as s:             s.settimeout(0.5)             s.connect((str(ip), port))             banner = grab_banner(ip, port)             return (port, banner)     except:         return None  def scan_host_ports(ip, ports):     open_ports = []     for port in ports:         result = scan_port(ip, port)         if result:             port, banner = result             open_ports.append((port, banner))     return open_ports  def scan_network(subnet, ports):     active_hosts = []     with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:         futures = {executor.submit(is_host_alive, ip): ip for ip in ipaddress.IPv4Network(subnet)}         for future in concurrent.futures.as_completed(futures):             ip = future.result()             if ip:                 print(f\"[+] \u0425\u043e\u0441\u0442 \u0430\u043a\u0442\u0438\u0432\u0435\u043d: {ip}\")                 active_hosts.append(ip)      print(\"\\n[~] \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0430\u0445...\\n\")     for ip in active_hosts:         open_ports = scan_host_ports(ip, ports)         if open_ports:             print(f\"[\u2022] \u0425\u043e\u0441\u0442 {ip} \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b:\")             for port, banner in open_ports:                 service = identify_service(banner, port)                 cves = find_vulnerabilities(banner)                 print(f\"    [+] \u041f\u043e\u0440\u0442 {port}\/tcp | \u0421\u0435\u0440\u0432\u0438\u0441: {service} | \u0411\u0430\u043d\u043d\u0435\u0440: {banner}\")                 if cves:                     print(f\"        [!] \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438: {', '.join(cves)}\")             print()         else:             print(f\"[-] \u0425\u043e\u0441\u0442 {ip}: \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.\\n\")  def identify_service(banner, port):     if banner:         banner = banner.lower()         if \"ftp\" in banner:             return \"FTP\"         elif \"ssh\" in banner:             return \"SSH\"         elif \"http\" in banner:             return \"HTTP\"         elif \"smtp\" in banner:             return \"SMTP\"         elif \"mysql\" in banner:             return \"MySQL\"         elif \"rdp\" in banner or \"remote desktop\" in banner:             return \"RDP\"         elif \"smb\" in banner:             return \"SMB\"         elif \"telnet\" in banner:             return \"Telnet\"     known_ports = {         21: \"FTP\", 22: \"SSH\", 23: \"Telnet\", 25: \"SMTP\", 53: \"DNS\",         80: \"HTTP\", 110: \"POP3\", 139: \"SMB\", 143: \"IMAP\", 443: \"HTTPS\",         3306: \"MySQL\", 3389: \"RDP\", 8080: \"HTTP-Alt\"     }     return known_ports.get(port, \"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\")  def find_vulnerabilities(banner):     banner = banner.lower()     found = []     for vuln_banner, cves in VULNERABILITIES.items():         if vuln_banner in banner:             found.extend(cves)     return found  def main():     banner()     parser = argparse.ArgumentParser(description=\"\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 CVE.\")     parser.add_argument(\"subnet\", help=\"\u041f\u043e\u0434\u0441\u0435\u0442\u044c \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 192.168.1.0\/24\")     parser.add_argument(\"--ports\", help=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0440\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435)\", default=\"21,22,23,25,53,80,110,139,143,443,3306,3389,8080\")     args = parser.parse_args()      try:         port_list = [int(p.strip()) for p in args.ports.split(\",\")]         print(f\"[~] \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438: {args.subnet}\")         scan_network(args.subnet, port_list)     except ValueError:         print(\"[!] \u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438\u043b\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438.\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/h3>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d6\/508\/578\/0d6508578f58c5d3d5aefcaca1612a2c.png\" width=\"564\" height=\"301\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0d6\/508\/578\/0d6508578f58c5d3d5aefcaca1612a2c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d6\/508\/578\/0d6508578f58c5d3d5aefcaca1612a2c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u044b\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u0430\u044f, \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f(\u041d\u0430\u0439\u0434\u0435\u043d\/\u041d\u0435\u0442\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f), \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0446.\u0441\u0435\u0442\u0435\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/441\/053\/88d\/44105388d3c2f6f2f926c230d5672a7b.png\" width=\"559\" height=\"217\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/441\/053\/88d\/44105388d3c2f6f2f926c230d5672a7b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/441\/053\/88d\/44105388d3c2f6f2f926c230d5672a7b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u043d\u0438\u0437\u0438\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u0432\u0438\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.** \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443\u201d. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<pre><code>#!\/usr\/bin\/env python3  import requests import concurrent.futures import argparse import re from bs4 import BeautifulSoup  # \ud83d\udce1 \u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0421\u041d\u0413-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b SITES = {     \"VK\": \"https:\/\/vk.com\/{}\",     \"Telegram\": \"https:\/\/t.me\/{}\",     \"YouTube\": \"https:\/\/www.youtube.com\/@{}\",     \"GitHub\": \"https:\/\/github.com\/{}\" }  HEADERS = {     \"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64)\" }  def fetch_profile_info(site, url, username):     try:         r = requests.get(url, headers=HEADERS, timeout=5)         if r.status_code != 200:             return None          soup = BeautifulSoup(r.text, 'html.parser')         if site == \"VK\":             title = soup.title.string if soup.title else \"\"             match = re.search(r'(.+)\\| \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435', title)             if match:                 return match.group(1).strip()         elif site == \"Telegram\":             desc = soup.find(\"meta\", {\"property\": \"og:description\"})             if desc:                 return desc.get(\"content\", \"\").strip()         elif site == \"YouTube\":             meta = soup.find(\"meta\", {\"name\": \"title\"})             if meta:                 return meta.get(\"content\", \"\").strip()         elif site == \"GitHub\":             name = soup.find(\"span\", class_=\"p-name\")             if name:                 return name.get_text(strip=True)         return None     except Exception:         return None  def check_username(site_name, url_template, username):     url = url_template.format(username)     try:         response = requests.get(url, headers=HEADERS, timeout=5)         if response.status_code == 200:             info = fetch_profile_info(site_name, url, username)             return (site_name, url, \"\u2705 \u041d\u0430\u0439\u0434\u0435\u043d\", info)         elif response.status_code in [301, 302, 403]:             return (site_name, url, \"\u26a0\ufe0f \u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\", None)         else:             return (site_name, url, \"\u274c \u041d\u0435\u0442\", None)     except requests.RequestException:         return (site_name, url, \"\u274c \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\", None)  def main():     parser = argparse.ArgumentParser(description=\"\u041f\u043e\u0438\u0441\u043a \u043d\u0438\u043a\u0430 \u043f\u043e \u0421\u041d\u0413-\u0441\u0430\u0439\u0442\u0430\u043c \u0441 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0439.\")     parser.add_argument(\"username\", help=\"\u041d\u0438\u043a\u043d\u0435\u0439\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\")     args = parser.parse_args()      print(\"=\" * 60)     print(f\"\ud83d\udd0d \u041f\u043e\u0438\u0441\u043a \u043d\u0438\u043a\u0430: {args.username}\")     print(\"=\" * 60)      with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:         futures = []         for site, template in SITES.items():             futures.append(executor.submit(check_username, site, template, args.username))         for future in concurrent.futures.as_completed(futures):             site, url, status, info = future.result()             print(f\"[{site:&amp;lt;10}] {status} \u2014 {url}\")             if info:                 print(f\"              \u21aa {info}\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h2>\u0422\u0435\u0441\u0442 Perplexity<\/h2>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430<\/h3>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4d\/100\/034\/b4d1000349c07f6c8bc391af7ce412e5.png\" width=\"298\" height=\"249\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b4d\/100\/034\/b4d1000349c07f6c8bc391af7ce412e5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4d\/100\/034\/b4d1000349c07f6c8bc391af7ce412e5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b MAC-\u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d40\/b29\/9af\/d40b299afb19e26acc7b76d3b3674421.png\" width=\"754\" height=\"619\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d40\/b29\/9af\/d40b299afb19e26acc7b76d3b3674421.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d40\/b29\/9af\/d40b299afb19e26acc7b76d3b3674421.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0438\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 10 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f6\/0ac\/75a\/4f60ac75aef48e1e96b33e5fe0566bf6.png\" width=\"364\" height=\"347\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4f6\/0ac\/75a\/4f60ac75aef48e1e96b33e5fe0566bf6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f6\/0ac\/75a\/4f60ac75aef48e1e96b33e5fe0566bf6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0432\u044b\u0434\u0430\u0447\u0435 \u0441\u0442\u0430\u043b\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0438\u0441\u043a\u0430 CVE \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 API <a href=\"https:\/\/vulners.com\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0430<\/a>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 API \u0441\u0430\u0439\u0442\u0430, \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435 \u0432\u044b\u0432\u0435\u043b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0437\u0430\u0431\u044b\u043b \u043f\u0440\u043e \u0432\u044b\u0434\u0430\u0447\u0443 MAC-\u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<pre><code>import argparse import requests import subprocess from scapy.all import ARP, Ether, srp import xml.etree.ElementTree as ET  VULNERS_API_KEY = \"YOUR_API_KEY\" VULNERS_URL = \"https:\/\/vulners.com\/api\/v3\/search\/lucene\/\"  def get_vulnerabilities(service, version):     \"\"\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 Vulners API\"\"\"     headers = {'Content-Type': 'application\/json'}     query = f'type:cve AND affectedSoftware.name:\"{service}\" AND affectedSoftware.version:\"{version}\"'          try:         response = requests.get(             VULNERS_URL,             headers=headers,             params={                 'query': query,                 'apiKey': VULNERS_API_KEY             }         )         return response.json().get('data', {}).get('search', [])     except Exception as e:         return [f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: {str(e)}\"]  def parse_nmap_xml(xml_output):     \"\"\"\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0432\u044b\u0432\u043e\u0434\u0430 Nmap XML\"\"\"     root = ET.fromstring(xml_output)     results = []          for host in root.findall('host'):         ip = host.find('address').get('addr')         for port in host.findall('ports\/port'):             if port.find('state').get('state') == 'open':                 service = port.find('service')                 service_name = service.get('name', 'unknown')                 product = service.get('product', '')                 version = service.get('version', '')                                  results.append({                     'ip': ip,                     'port': port.get('portid'),                     'service': f\"{product} {version}\".strip(),                     'name': service_name                 })     return results  def enhanced_service_scan(target, ports):     \"\"\"\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 XML-\u0432\u044b\u0432\u043e\u0434\u043e\u043c\"\"\"     try:         ports_str = ','.join(map(str, ports))         result = subprocess.run(             ['nmap', '-sV', '-oX', '-', '-p', ports_str, target],             capture_output=True,             text=True,             check=True         )         return parse_nmap_xml(result.stdout)     except subprocess.CalledProcessError as e:         return [f\"\u041e\u0448\u0438\u0431\u043a\u0430 Nmap: {e.stderr}\"]     except FileNotFoundError:         return [\"Nmap \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\"]  def main():     parser = argparse.ArgumentParser(description='\u0421\u043a\u0430\u043d\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432')     parser.add_argument('-t', '--target', required=True, help='\u0426\u0435\u043b\u0435\u0432\u043e\u0439 IP \u0438\u043b\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u044c')     parser.add_argument('-p', '--ports', default='1-1024',                        help='\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 1-1024)')     args = parser.parse_args()      ports = range(*map(int, args.ports.split('-')))     services = enhanced_service_scan(args.target, ports)          print(f\"\\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f {args.target}:\")     for service in services:         print(f\"\\n{service['ip']}:{service['port']} - {service['service']}\")                  if service['service'] != '':             vulns = get_vulnerabilities(service['name'], service['service'])             if vulns:                 print(\"\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438:\")                 for vuln in vulns[:3]:  # \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043f-3 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438                     print(f\"  - {vuln.get('_source', {}).get('title', 'Unknown')}\")                     print(f\"    CVE: {vuln.get('_source', {}).get('cvelist', ['N\/A'])[0]}\")                     print(f\"    \u0421\u0441\u044b\u043b\u043a\u0430: {vuln.get('_source', {}).get('href', 'N\/A')}\")             else:                 print(\"\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/h3>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a59\/45a\/afb\/a5945aafbfcf2775e929666e2406275b.png\" width=\"545\" height=\"285\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a59\/45a\/afb\/a5945aafbfcf2775e929666e2406275b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a59\/45a\/afb\/a5945aafbfcf2775e929666e2406275b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439, \u0447\u0442\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 10 \u043c\u0438\u043d\u0443\u0442 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<h4>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/330\/87f\/4e2\/33087f4e25dcf09a441c60b3c4483514.png\" width=\"472\" height=\"817\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/330\/87f\/4e2\/33087f4e25dcf09a441c60b3c4483514.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/330\/87f\/4e2\/33087f4e25dcf09a441c60b3c4483514.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a. \u041d\u0430\u0431\u043e\u0440 \u0441\u043e\u0446.\u0441\u0435\u0442\u0435\u0439 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u0421\u041d\u0413. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u0443\u0442\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u0445 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043a\u0430\u043a \u0443 GPT, \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. ChatGPT \u043d\u0430\u0448\u0451\u043b \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0412\u041a \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0442 Perplexity \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.<\/p>\n<pre><code>import requests from bs4 import BeautifulSoup  def get_account_info(url, platform):     \"\"\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\"\"\"     try:         response = requests.get(url, timeout=10)         soup = BeautifulSoup(response.text, 'html.parser')                  info = {             'url': url,             'platform': platform.capitalize(),             'name': '\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c',             'bio': '\u041d\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438',             'posts': '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445',             'followers': '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445'         }                  if platform == 'vk':             name_tag = soup.find('h1', class_='page_name')             if name_tag: info['name'] = name_tag.text.strip()                          bio_tag = soup.find('div', class_='page_current_info')             if bio_tag: info['bio'] = bio_tag.text.strip()                          counters = soup.find_all('div', class_='counts_module_info')             if counters:                 if len(counters) &gt; 0: info['posts'] = counters[0].text.strip()                 if len(counters) &gt; 1: info['followers'] = counters[1].text.strip()                  elif platform == 'instagram':             meta = soup.find('meta', property='og:description')             if meta:                 content = meta['content']                 parts = content.split(' - ')                 if len(parts) &gt; 0:                     followers = parts[0].split(' ')[0]                     posts = parts[1].split(' ')[0]                     info['followers'] = followers                     info['posts'] = posts             name_tag = soup.find('title')             if name_tag: info['name'] = name_tag.text.split('\u2022')[0].strip()                  elif platform == 'twitter':             name_tag = soup.find('div', {'data-testid': 'UserName'})             if name_tag: info['name'] = name_tag.text.strip()                          bio_tag = soup.find('div', {'data-testid': 'UserDescription'})             if bio_tag: info['bio'] = bio_tag.text.strip()                          stats = soup.find_all('span', {'data-testid': 'app-text-transition-container'})             if stats:                 if len(stats) &gt; 0: info['posts'] = stats[0].text.strip()                 if len(stats) &gt; 1: info['followers'] = stats[1].text.strip()                  elif platform == 'youtube':             name_tag = soup.find('meta', property='og:title')             if name_tag: info['name'] = name_tag['content']                          subs_tag = soup.find('meta', itemprop='subscriberCount')             if subs_tag: info['followers'] = f\"{subs_tag['content']} \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432\"                  return info          except Exception as e:         return {'error': str(e), 'platform': platform, 'url': url}  def check_username(username):     \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0441\u0431\u043e\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u0445\"\"\"     platforms = {         'vk': f'https:\/\/vk.com\/{username}',         'instagram': f'https:\/\/www.instagram.com\/{username}\/',         'twitter': f'https:\/\/twitter.com\/{username}',         'youtube': f'https:\/\/www.youtube.com\/{username}',         'tiktok': f'https:\/\/www.tiktok.com\/@{username}',         'github': f'https:\/\/github.com\/{username}',         'habr': f'https:\/\/habr.com\/ru\/users\/{username}\/',         'pikabu': f'https:\/\/pikabu.ru\/@{username}',         'telegram': f'https:\/\/t.me\/{username}',         'ok': f'https:\/\/ok.ru\/{username}'     }          results = {}          for platform, url in platforms.items():         try:             response = requests.head(url, timeout=5)             if response.status_code == 200:                 print(f\"\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c {platform}...\")                 info = get_account_info(url, platform)                 results[platform] = info             else:                 results[platform] = {'status': '\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d'}         except Exception as e:             results[platform] = {'error': str(e)}          return results  def display_results(results):     \"\"\"\u0412\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c\"\"\"     print(\"\\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430:\")     for platform, data in results.items():         print(f\"\\n\u25ac\u25ac\u25ac {platform.upper()} \u25ac\u25ac\u25ac\")                  if 'status' in data:             print(\"\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\")             continue                      if 'error' in data:             print(f\"\u041e\u0448\u0438\u0431\u043a\u0430: {data['error']}\")             continue                      print(f\"\u0421\u0441\u044b\u043b\u043a\u0430: {data['url']}\")         print(f\"\u0418\u043c\u044f: {data.get('name', '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445')}\")         print(f\"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435: {data.get('bio', '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445')}\")         print(f\"\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: {data.get('posts', '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445')}\")         print(f\"\u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438: {data.get('followers', '\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445')}\")  def main():     username = input(\"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430: \")     results = check_username(username)     display_results(results)  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h2>\u0422\u0435\u0441\u0442 DeepSeek<\/h2>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430<\/h3>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/744\/1b4\/80a\/7441b480a925a12fe00d925a4a36a210.png\" width=\"504\" height=\"238\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/744\/1b4\/80a\/7441b480a925a12fe00d925a4a36a210.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/744\/1b4\/80a\/7441b480a925a12fe00d925a4a36a210.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d Perplexity, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0432\u043e\u0434\u0430 \u043c\u0430\u0441\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>\/<\/code>.<\/p>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e38\/0b1\/0b1\/e380b10b128c2fe26268c59bd9d5d19b.png\" width=\"572\" height=\"537\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e38\/0b1\/0b1\/e380b10b128c2fe26268c59bd9d5d19b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e38\/0b1\/0b1\/e380b10b128c2fe26268c59bd9d5d19b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u0440\u0442\u044b, \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0412 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/77b\/b56\/947\/77bb56947eefc4a2834a34cc394fa178.png\" width=\"570\" height=\"625\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/77b\/b56\/947\/77bb56947eefc4a2834a34cc394fa178.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/77b\/b56\/947\/77bb56947eefc4a2834a34cc394fa178.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 API \u0441\u0430\u0439\u0442\u043e\u0432: <a href=\"http:\/\/cve.circl.lu\" rel=\"noopener noreferrer nofollow\">cve.circl.lu<\/a> \u0438 <a href=\"http:\/\/www.exploit-db.com\" rel=\"noopener noreferrer nofollow\">www.exploit-db.com<\/a>, \u043d\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<pre><code>import argparse from scapy.all import ARP, Ether, srp import ipaddress import nmap import requests import json from datetime import datetime  # \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f API \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 CVE_API_URL = \"https:\/\/cve.circl.lu\/api\/search\" EXPLOIT_DB_API = \"https:\/\/www.exploit-db.com\/search\"  def scan_network(subnet, mask):     \"\"\"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u0441\u0435\u0442\u044c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b.\"\"\"     network = f\"{subnet}\/{mask}\"     try:         ip_network = ipaddress.ip_network(network, strict=False)     except ValueError as e:         print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u043c\u0430\u0441\u043a\u0435: {e}\")         return []          arp_request = ARP(pdst=str(ip_network))     ether_frame = Ether(dst=\"ff:ff:ff:ff:ff:ff\")     packet = ether_frame \/ arp_request     result = srp(packet, timeout=3, verbose=0)[0]          return [{'ip': received.psrc, 'mac': received.hwsrc} for sent, received in result]  def scan_ports(host, ports=\"1-1000\"):     \"\"\"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445.\"\"\"     nm = nmap.PortScanner()     nm.scan(hosts=host, ports=ports, arguments='-sV --version-intensity 3')          open_ports = []     for proto in nm[host].all_protocols():         for port, info in nm[host][proto].items():             if info['state'] == 'open':                 open_ports.append({                     'port': port,                     'service': info['name'],                     'version': info.get('version', '\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430'),                     'product': info.get('product', '\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d')                 })     return open_ports  def check_cve(service, version):     \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 CVE API.\"\"\"     try:         params = {'product': service, 'version': version}         response = requests.get(CVE_API_URL, params=params)         if response.status_code == 200:             return response.json().get('results', [])     except Exception as e:         print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 CVE: {e}\")     return []  def check_exploits(service, version):     \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u044b \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 API Exploit-DB).\"\"\"     # \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a Exploit-DB \u0438\u043b\u0438 Vulners     return []  def check_common_vulns(service, version, port):     \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.\"\"\"     vulns = []     if service == 'http':         if 'Apache' in version and '2.4.49' in version:             vulns.append('CVE-2021-41773 (Path Traversal in Apache 2.4.49)')     elif service == 'smb' and 'Samba' in version:         vulns.append('CVE-2017-7494 (Samba RCE)')     elif service == 'ssh' and 'OpenSSH' in version and '7.9' in version:         vulns.append('CVE-2021-41617 (OpenSSH 7.9 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c)')     return vulns  def get_vulnerabilities(host_info):     \"\"\"\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.\"\"\"     service = host_info['service']     version = host_info['version']     port = host_info['port']          vulns = []          # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 CVE     cve_list = check_cve(service, version)     for cve in cve_list:         vulns.append(f\"{cve.get('id', 'CVE-XXXX')}: {cve.get('summary', '\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430')}\")          # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u0449\u0438\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439     vulns.extend(check_common_vulns(service, version, port))          return vulns if vulns else [\"\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b\"]  def main():     parser = argparse.ArgumentParser(description=\"\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439\")     parser.add_argument(\"--subnet\", required=True, help=\"\u041f\u043e\u0434\u0441\u0435\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 192.168.1.0)\")     parser.add_argument(\"--mask\", required=True, help=\"\u041c\u0430\u0441\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 24)\")     parser.add_argument(\"--ports\", default=\"1-1000\", help=\"\u041f\u043e\u0440\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 80,443)\")     args = parser.parse_args()      print(f\"[*] \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 {args.subnet}\/{args.mask}...\")     hosts = scan_network(args.subnet, args.mask)          if not hosts:         print(\"[!] \u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b.\")         return          print(\"\\n[+] \u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b:\")     for host in hosts:         print(f\"IP: {host['ip']}\\tMAC: {host['mac']}\")                  open_ports = scan_ports(host['ip'], args.ports)         if not open_ports:             print(f\"  [!] \u041d\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432.\")             continue                      for port_info in open_ports:             print(f\"\\n  [\u041f\u043e\u0440\u0442 {port_info['port']}] {port_info['service']} ({port_info['product']} {port_info['version']})\")                          # \u041f\u043e\u0438\u0441\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439             vulns = get_vulnerabilities({                 'service': port_info['service'],                 'version': port_info['version'],                 'port': port_info['port']             })                          print(\"  [\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438]:\")             for vuln in vulns:                 print(f\"    - {vuln}\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/h3>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/842\/ecd\/3c6\/842ecd3c6a80d6d43d0285f85813ec86.png\" width=\"512\" height=\"360\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/842\/ecd\/3c6\/842ecd3c6a80d6d43d0285f85813ec86.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/842\/ecd\/3c6\/842ecd3c6a80d6d43d0285f85813ec86.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0442\u0432\u0435\u0442\u043e\u043c ChatGPT. \u041a \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 \u043d\u0435\u0442. \u041f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441 &#171;\u0420\u0443\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430&#187;, \u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0438.<\/p>\n<h4>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d3f\/4de\/588\/d3f4de588758392412804255c9f539f2.png\" width=\"512\" height=\"360\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d3f\/4de\/588\/d3f4de588758392412804255c9f539f2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d3f\/4de\/588\/d3f4de588758392412804255c9f539f2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 ChatGPT, \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u041d\u043e \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<pre><code>import requests from bs4 import BeautifulSoup import time import json  # \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 SITES = {     \"VK\": {         \"url\": \"https:\/\/vk.com\/{}\",         \"check\": lambda response, soup: response.status_code == 200 and not soup.find(\"div\", class_=\"profile_deleted\"),         \"info\": lambda soup: {             \"\u0418\u043c\u044f\": soup.find(\"h1\", class_=\"page_name\").get_text(strip=True) if soup.find(\"h1\", class_=\"page_name\") else \"\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e\",             \"\u0421\u0442\u0430\u0442\u0443\u0441\": soup.find(\"div\", class_=\"page_current_info\").get_text(strip=True) if soup.find(\"div\", class_=\"page_current_info\") else \"\u041d\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\",         }     },     \"Telegram\": {         \"url\": \"https:\/\/t.me\/{}\",         \"check\": lambda response, _: response.status_code == 200 and response.url == response.request.url,         \"info\": lambda soup: {             \"\u0418\u043c\u044f\": soup.find(\"div\", class_=\"tgme_page_title\").get_text(strip=True) if soup.find(\"div\", class_=\"tgme_page_title\") else \"\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e\",             \"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\": soup.find(\"div\", class_=\"tgme_page_description\").get_text(strip=True) if soup.find(\"div\", class_=\"tgme_page_description\") else \"\u041d\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\",         }     },     \"Odnoklassniki\": {         \"url\": \"https:\/\/ok.ru\/{}\",         \"check\": lambda response, _: response.status_code == 200,         \"info\": lambda soup: {             \"\u0418\u043c\u044f\": soup.find(\"h1\", class_=\"profile-user-name\").get_text(strip=True) if soup.find(\"h1\", class_=\"profile-user-name\") else \"\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e\",         }     },     \"GitHub\": {         \"url\": \"https:\/\/api.github.com\/users\/{}\",         \"check\": lambda response, _: response.status_code == 200,         \"info\": lambda data: {             \"\u0418\u043c\u044f\": data.get(\"name\", \"\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e\"),             \"\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438\": data.get(\"public_repos\", 0),             \"\u041f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438\": data.get(\"followers\", 0),         }     }, }  HEADERS = {     \"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/91.0.4472.124 Safari\/537.36\" }  def get_account_info(nickname, site_name, site_data):     \"\"\"\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.\"\"\"     url = site_data[\"url\"].format(nickname)     try:         response = requests.get(url, headers=HEADERS, timeout=10)                  if \"api.github.com\" in url:             if site_data[\"check\"](response, None):                 return site_data[\"info\"](response.json())         else:             soup = BeautifulSoup(response.text, 'html.parser')             if site_data[\"check\"](response, soup):                 return site_data[\"info\"](soup)                      except Exception as e:         return {\"\u041e\u0448\u0438\u0431\u043a\u0430\": f\"{type(e).__name__}: {str(e)}\"}     return None  def check_nickname(nickname):     \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.\"\"\"     results = {}     for site_name, site_data in SITES.items():         time.sleep(1)         info = get_account_info(nickname, site_name, site_data)         if info:             results[site_name] = {\"status\": \"\u2705 \u0417\u0430\u043d\u044f\u0442\", \"info\": info}         else:             results[site_name] = {\"status\": \"\u274c \u0421\u0432\u043e\u0431\u043e\u0434\u0435\u043d \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\"}     return results  def print_results(nickname, results):     \"\"\"\u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.\"\"\"     print(f\"\\n\ud83d\udd0d \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u043b\u044f '{nickname}':\")     for site, data in results.items():         print(f\"\\n{site}: {data['status']}\")         if \"info\" in data:             for key, value in data[\"info\"].items():                 print(f\"  {key}: {value}\")  def main():     nickname = input(\"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430: \").strip()     results = check_nickname(nickname)     print_results(nickname, results)  if __name__ == \"__main__\":     main() <\/code><\/pre>\n<h2>\u0422\u0435\u0441\u0442 Together.ai<\/h2>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430<\/h3>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8c\/0f4\/183\/f8c0f41837d2222ae2fedb7628b3a368.png\" width=\"567\" height=\"166\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f8c\/0f4\/183\/f8c0f41837d2222ae2fedb7628b3a368.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8c\/0f4\/183\/f8c0f41837d2222ae2fedb7628b3a368.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d Perplexity \u0438 DeepSeek.<\/p>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11b\/abe\/f7a\/11babef7a629c884e56c293a4dd08fe9.png\" width=\"568\" height=\"359\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/11b\/abe\/f7a\/11babef7a629c884e56c293a4dd08fe9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11b\/abe\/f7a\/11babef7a629c884e56c293a4dd08fe9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 Perplexity \u0438 DeepSeek.<\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea7\/221\/135\/ea7221135806a8d0fcd0aee3b6291864.png\" width=\"840\" height=\"856\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ea7\/221\/135\/ea7221135806a8d0fcd0aee3b6291864.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea7\/221\/135\/ea7221135806a8d0fcd0aee3b6291864.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0435\u0440\u0432\u0430\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u043b\u0430 \u043d\u0430\u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c CVE \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f API <a href=\"http:\/\/vulners.com\" rel=\"noopener noreferrer nofollow\">vulners.com<\/a>. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 API-\u043a\u043b\u044e\u0447 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.<\/p>\n<pre><code>import argparse import requests import subprocess from scapy.all import ARP, Ether, srp import xml.etree.ElementTree as ET  VULNERS_API_KEY = \"YOUR_API_KEY\" VULNERS_URL = \"https:\/\/vulners.com\/api\/v3\/search\/lucene\/\"  def get_vulnerabilities(service, version):     \"\"\"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 Vulners API\"\"\"     headers = {'Content-Type': 'application\/json'}     query = f'type:cve AND affectedSoftware.name:\"{service}\" AND affectedSoftware.version:\"{version}\"'          try:         response = requests.get(             VULNERS_URL,             headers=headers,             params={                 'query': query,                 'apiKey': VULNERS_API_KEY             }         )         return response.json().get('data', {}).get('search', [])     except Exception as e:         return [f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: {str(import ipaddress from scapy.all import ARP, Ether, srp import nmap import requests  def network_scanner(ip_range):     \"\"\"     \u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0442\u044c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432.      :param ip_range: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \"192.168.1.0\/24\"     :return: \u0421\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432     \"\"\"     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 ipaddress.ip_network \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432     network = ipaddress.ip_network(ip_range, strict=False)      # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 ARP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430     arp = ARP(pdst=str(network))     ether = Ether(dst=\"ff:ff:ff:ff:ff:ff\")     packet = ether\/arp      # \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442     result = srp(packet, timeout=3, verbose=0)[0]      # \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432     active_hosts = []     for sent, received in result:         active_hosts.append({'ip': received.psrc, 'mac': received.hwsrc})      return active_hosts  def port_scanner(host):     \"\"\"     \u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0440\u0442\u044b \u0445\u043e\u0441\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445.      :param host: IP-\u0430\u0434\u0440\u0435\u0441 \u0445\u043e\u0441\u0442\u0430     :return: \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445     \"\"\"     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 nmap.PortScanner \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432     nm = nmap.PortScanner()      # \u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0440\u0442\u044b     nm.scan(host, arguments='-sV')      # \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     services = []     for proto in nm[host].all_protocols():         lport = sorted(nm[host][proto].keys())         for port in lport:             service = nm[host][proto][port]             services.append({                 'port': port,                 'protocol': proto,                 'service': service['name'],                 'version': service['product'] + ' ' + service['version']             })      return services  def vulnerability_scanner(service):     \"\"\"     \u0418\u0449\u0435\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430.      :param service: \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0435     :return: \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439     \"\"\"     api_key = \"\"  # \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439 API-\u043a\u043b\u044e\u0447     url = f\"https:\/\/vulners.com\/api\/v3\/search\/lucene\/?query={service['service']}%20{service['version']}&amp;size=10\"     headers = {\"Authorization\": f\"Bearer {api_key}\"}      response = requests.get(url, headers=headers)     if response.status_code == 200:         data = response.json()         vulnerabilities = []         for result in data['data']['search']:             vulnerability = {                 'id': result.get('_id', 'N\/A'),                 'title': result.get('title', 'N\/A'),                 'cvss': result.get('cvss', {}).get('score', 'N\/A')             }             vulnerabilities.append(vulnerability)         return vulnerabilities     else:         return []  def main():     # \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u0430\u0441\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438     ip_range = input(\"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 192.168.1.0\/24): \")      # \u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0442\u044c     active_hosts = network_scanner(ip_range)      # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b     for host in active_hosts:         print(f\"\u0425\u043e\u0441\u0442: {host['ip']} ({host['mac']})\")         services = port_scanner(host['ip'])         if services:             print(\"\u0421\u0435\u0440\u0432\u0438\u0441\u044b:\")             for service in services:                 print(f\"  {service['port']}\/{service['protocol']}: {service['service']} ({service['version']})\")                 vulnerabilities = vulnerability_scanner(service)                 if vulnerabilities:                     print(\"    \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438:\")                     for vulnerability in vulnerabilities:                         print(f\"      ID: {vulnerability['id']}, \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a: {vulnerability['title']}, CVSS: {vulnerability['cvss']}\")                 else:                     print(\"    \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b.\")         else:             print(\"\u0421\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b.\")         print()  if __name__ == \"__main__\":     main() e)}\"]  def parse_nmap_xml(xml_output):     \"\"\"\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0432\u044b\u0432\u043e\u0434\u0430 Nmap XML\"\"\"     root = ET.fromstring(xml_output)     results = []          for host in root.findall('host'):         ip = host.find('address').get('addr')         for port in host.findall('ports\/port'):             if port.find('state').get('state') == 'open':                 service = port.find('service')                 service_name = service.get('name', 'unknown')                 product = service.get('product', '')                 version = service.get('version', '')                                  results.append({                     'ip': ip,                     'port': port.get('portid'),                     'service': f\"{product} {version}\".strip(),                     'name': service_name                 })     return results  def enhanced_service_scan(target, ports):     \"\"\"\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 XML-\u0432\u044b\u0432\u043e\u0434\u043e\u043c\"\"\"     try:         ports_str = ','.join(map(str, ports))         result = subprocess.run(             ['nmap', '-sV', '-oX', '-', '-p', ports_str, target],             capture_output=True,             text=True,             check=True         )         return parse_nmap_xml(result.stdout)     except subprocess.CalledProcessError as e:         return [f\"\u041e\u0448\u0438\u0431\u043a\u0430 Nmap: {e.stderr}\"]     except FileNotFoundError:         return [\"Nmap \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\"]  def main():     parser = argparse.ArgumentParser(description='\u0421\u043a\u0430\u043d\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432')     parser.add_argument('-t', '--target', required=True, help='\u0426\u0435\u043b\u0435\u0432\u043e\u0439 IP \u0438\u043b\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u044c')     parser.add_argument('-p', '--ports', default='1-1024',                        help='\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 1-1024)')     args = parser.parse_args()      ports = range(*map(int, args.ports.split('-')))     services = enhanced_service_scan(args.target, ports)          print(f\"\\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f {args.target}:\")     for service in services:         print(f\"\\n{service['ip']}:{service['port']} - {service['service']}\")                  if service['service'] != '':             vulns = get_vulnerabilities(service['name'], service['service'])             if vulns:                 print(\"\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438:\")                 for vuln in vulns[:3]:  # \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043f-3 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438                     print(f\"  - {vuln.get('_source', {}).get('title', 'Unknown')}\")                     print(f\"    CVE: {vuln.get('_source', {}).get('cvelist', ['N\/A'])[0]}\")                     print(f\"    \u0421\u0441\u044b\u043b\u043a\u0430: {vuln.get('_source', {}).get('href', 'N\/A')}\")             else:                 print(\"\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/h3>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f39\/acf\/bdf\/f39acfbdfda876bf5e3926e891caaad6.png\" width=\"449\" height=\"229\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f39\/acf\/bdf\/f39acfbdfda876bf5e3926e891caaad6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f39\/acf\/bdf\/f39acfbdfda876bf5e3926e891caaad6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0418\u0418, \u0437\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u044b.<\/p>\n<h4>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e76\/207\/1fd\/e762071fddc1410c8a1a783c3a287a85.png\" width=\"554\" height=\"237\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e76\/207\/1fd\/e762071fddc1410c8a1a783c3a287a85.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e76\/207\/1fd\/e762071fddc1410c8a1a783c3a287a85.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435 \u0441\u043c\u043e\u0433 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c DeepSeek, \u043d\u043e \u0432 \u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<pre><code>import requests from bs4 import BeautifulSoup  def search_nickname(nickname):     # \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430     resources = [         {\"name\": \"\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435\", \"url\": f\"https:\/\/vk.com\/{nickname}\"},         {\"name\": \"Instagram\", \"url\": f\"https:\/\/www.instagram.com\/{nickname}\/\"},         {\"name\": \"Telegram\", \"url\": f\"https:\/\/t.me\/{nickname}\"},         {\"name\": \"Twitter\", \"url\": f\"https:\/\/twitter.com\/{nickname}\"},         {\"name\": \"TikTok\", \"url\": f\"https:\/\/www.tiktok.com\/@{nickname}\"},         {\"name\": \"Reddit\", \"url\": f\"https:\/\/www.reddit.com\/user\/{nickname}\"},         {\"name\": \"GitHub\", \"url\": f\"https:\/\/github.com\/{nickname}\"},     ]      # \u041f\u043e\u0438\u0441\u043a \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445     results = []     for resource in resources:         url = resource[\"url\"].format(nickname=nickname)         try:             response = requests.get(url, timeout=5)             if response.status_code == 200:                 soup = BeautifulSoup(response.text, 'html.parser')                 info = ''                 if resource['name'] == '\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435':                     info = get_vk_info(soup)                 elif resource['name'] == 'Instagram':                     info = get_instagram_info(soup)                 elif resource['name'] == 'Twitter':                     info = get_twitter_info(soup)                 results.append({\"name\": resource[\"name\"], \"url\": url, \"status\": \"\u041d\u0430\u0439\u0434\u0435\u043d\", \"info\": info})             else:                 results.append({\"name\": resource[\"name\"], \"url\": url, \"status\": \"\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\", \"info\": ''})         except requests.exceptions.RequestException as e:             results.append({\"name\": resource[\"name\"], \"url\": url, \"status\": f\"\u041e\u0448\u0438\u0431\u043a\u0430: {e}\", \"info\": ''})      return results  def get_vk_info(soup):     try:         name = soup.find('h1', class_='page_name').text.strip()         return f'\u0418\u043c\u044f: {name}'     except AttributeError:         return ''  def get_instagram_info(soup):     try:         name = soup.find('meta', property='og:title')['content']         return f'\u0418\u043c\u044f: {name}'     except (AttributeError, TypeError):         return ''  def get_twitter_info(soup):     try:         name = soup.find('span', class_='ProfileHeaderCard-name').text.strip()         return f'\u0418\u043c\u044f: {name}'     except AttributeError:         return ''  def main():     # \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0438\u043a\u043d\u0435\u0439\u043c     nickname = input(\"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0438\u043a\u043d\u0435\u0439\u043c: \")      # \u0418\u0449\u0435\u043c \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445     results = search_nickname(nickname)      # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b     print(\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430:\")     for result in results:         print(f\"{result['name']}: {result['url']} ({result['status']})\")         if result['info']:             print(f\"  {result['info']}\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h2>\u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438<\/h3>\n<p><em>\u041e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/em>:<\/p>\n<ul>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 <a href=\"http:\/\/Together.ai\" rel=\"noopener noreferrer nofollow\">Together.ai<\/a> \u043d\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <code>requests.exceptions.RequestException<\/code> \u0434\u043b\u044f API Vulners.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 ChatGPT \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0445\u043e\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0440\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/em><\/p>\n<ul>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 ChatGPT \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>ThreadPoolExecutor(max_workers=100)<\/code>, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439 DoS \u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 IP.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 Perplexity \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u041d\u0435\u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/em><\/p>\n<ul>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 ChatGPT \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>identify_service<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (<code>if \"ftp\" in banner<\/code>) \u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/914\/741\/818\/914741818453399478cb820d99cd14d6.png\" width=\"870\" height=\"111\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/914\/741\/818\/914741818453399478cb820d99cd14d6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/914\/741\/818\/914741818453399478cb820d99cd14d6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437 OSINT-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h3>\n<ul>\n<li>\n<p><em>\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430: <\/em><\/p>\n<ul>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 ChatGPT \u0438 \u043e\u0442 Perplexity \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>BeautifulSoup<\/code> \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u043e\u0446\u0441\u0435\u0442\u0435\u0439, \u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 HTML \u0447\u0430\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><em>\u041d\u0435\u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0445\u0432\u0430\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: <\/em><\/p>\n<ul>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043e\u0442 DeepSeek \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e VK, Telegram, OK \u0438 GitHub, \u0430 \u0432 <a href=\"http:\/\/Together.ai\" rel=\"noopener noreferrer nofollow\">Together.ai<\/a> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d TikTok, \u043d\u043e \u043d\u0435\u0442 \u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e7e\/dbe\/be9\/e7edbebe9e48cd38c41c0af34424a9cc.png\" width=\"882\" height=\"102\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e7e\/dbe\/be9\/e7edbebe9e48cd38c41c0af34424a9cc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e7e\/dbe\/be9\/e7edbebe9e48cd38c41c0af34424a9cc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b1\/b17\/895\/0b1b1789561ff14a2abbcaeed0dda9b5.png\" width=\"548\" height=\"110\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0b1\/b17\/895\/0b1b1789561ff14a2abbcaeed0dda9b5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b1\/b17\/895\/0b1b1789561ff14a2abbcaeed0dda9b5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>\u0415\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432 Telegram-\u043a\u0430\u043d\u0430\u043b\u0435\u00a0\u2014\u00a0<\/strong><a href=\"https:\/\/t.me\/+4CK-ideazZBmZDYy\" rel=\"noopener noreferrer nofollow\"><strong>AI-\u0448\u043d\u0430\u044f<\/strong><\/a><strong> <\/strong><\/p>\n<p><a href=\"https:\/\/t.me\/+aEPTRPGJ2FA5ZjVi\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 OSINT \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0435 (\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438)<\/strong><\/a><strong>\u00a0\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442<\/strong>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/906608\/\"> https:\/\/habr.com\/ru\/articles\/906608\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439! \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0443\u0431\u0440\u0438\u043a\u0443 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u043c \u0438 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0432 \u0441\u0444\u0435\u0440\u0435 \u0418\u0411. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c 3 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u043e\u0434\u043d\u0443 \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0418\u0418 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432 \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u043e\u0432 \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u041d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e\u0442 \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439.<\/strong><\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 \u042f\u041f Python. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u044b\u0435 \u0445\u043e\u0441\u0442\u044b \u043d\u0430 \u0441\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b, \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u0438\u0441\u043a CVE \u043f\u043e\u0434 \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0438\u043a\u043d\u0435\u0439\u043c \u0432 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u0421\u041d\u0413, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0418\u0418 \u0432\u043e\u0437\u044c\u043c\u0451\u043c: ChatGPT, Perplexity, DeepSeek \u0438 Together.<\/p>\n<h2>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u044b \u043a \u043d\u0438\u043c<\/h2>\n<p>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u041d\u0430\u043f\u0438\u0448\u0438 \u043d\u0430 python \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443 \u043f\u043e\u0434\u0441\u0435\u0442\u0438\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0440\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043d\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u041f\u041e\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u044c \u043f\u043e\u0438\u0441\u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443\u201d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0430\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u041d\u0430\u043f\u0438\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u0430 \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0442\u044f\u043c \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0421\u041d\u0413\u201d;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/strong>. <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u043c\u043f\u0442: \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443\u201d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u0435.<\/p>\n<h2>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 GodMode<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c GodMode, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 Chromium \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 <code>npm<\/code>:<\/p>\n<pre><code>git clone https:\/\/github.com\/smol-ai\/GodMode.git cd GodMode npm install --force npm run start<\/code><\/pre>\n<figure class=\"full-width\"><\/figure>\n<h2>\u0422\u0435\u0441\u0442 ChatGPT<\/h2>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430<\/h3>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438<\/h4>\n<figure class=\"\"><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u041f\u043e\u043c\u0438\u043c\u043e IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<h4>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/h4>\n<figure class=\"full-width\"><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u0432\u0438\u0434\u043d\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0430 \u043d\u0438\u0445. \u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043a\u043e\u0434 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 80\u043e\u043c \u043f\u043e\u0440\u0442\u0443. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432(Bad Request\/ready), \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0443.<\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a CVE \u043f\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u0438 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u043c<\/h4>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0430\u0445 \u044d\u0442\u0430 \u0431\u0430\u0437\u0430 \u043d\u0435 \u0434\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<pre><code>#!\/usr\/bin\/env python3  import ipaddress import subprocess import concurrent.futures import argparse import socket import platform  # \ud83d\udd10 \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 VULNERABILITIES = {     \"apache\/2.4.49\": [\"CVE-2021-41773\", \"CVE-2021-42013\"],     \"nginx\/1.18.0\": [\"CVE-2021-23017\"],     \"openssh_7.2p2\": [\"CVE-2016-0777\"],     \"mysql 5.7.29\": [\"CVE-2020-2574\"],     \"proftpd 1.3.5\": [\"CVE-2019-12815\"],     \"vsftpd 2.3.4\": [\"CVE-2011-2523\"] }  def banner():     print(\"=\"*60)     print(\"     \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 CVE\")     print(\"=\"*60)  def is_host_alive(ip):     try:         param = \"-n\" if platform.system().lower() == \"windows\" else \"-c\"         result = subprocess.run(             [\"ping\", param, \"1\", \"-W\", \"1\", str(ip)],             stdout=subprocess.DEVNULL,             stderr=subprocess.DEVNULL         )         return ip if result.returncode == 0 else None     except Exception:         return None  def grab_banner(ip, port):     try:         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:             s.settimeout(1)             s.connect((str(ip), port))             s.sendall(b\"\\r\\n\")             banner = s.recv(1024).decode(errors=\"ignore\").strip()             return banner     except:         return \"\"  def scan_port(ip, port):     try:         with socket.socket() as s:             s.settimeout(0.5)             s.connect((str(ip), port))             banner = grab_banner(ip, port)             return (port, banner)     except:         return None  def scan_host_ports(ip, ports):     open_ports = []     for port in ports:         result = scan_port(ip, port)         if result:             port, banner = result             open_ports.append((port, banner))     return open_ports  def scan_network(subnet, ports):     active_hosts = []     with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:         futures = {executor.submit(is_host_alive, ip): ip for ip in ipaddress.IPv4Network(subnet)}         for future in concurrent.futures.as_completed(futures):             ip = future.result()             if ip:                 print(f\"[+] \u0425\u043e\u0441\u0442 \u0430\u043a\u0442\u0438\u0432\u0435\u043d: {ip}\")                 active_hosts.append(ip)      print(\"\\n[~] \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u0430\u0445...\\n\")     for ip in active_hosts:         open_ports = scan_host_ports(ip, ports)         if open_ports:             print(f\"[\u2022] \u0425\u043e\u0441\u0442 {ip} \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0440\u0442\u044b:\")             for port, banner in open_ports:                 service = identify_service(banner, port)                 cves = find_vulnerabilities(banner)                 print(f\"    [+] \u041f\u043e\u0440\u0442 {port}\/tcp | \u0421\u0435\u0440\u0432\u0438\u0441: {service} | \u0411\u0430\u043d\u043d\u0435\u0440: {banner}\")                 if cves:                     print(f\"        [!] \u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438: {', '.join(cves)}\")             print()         else:             print(f\"[-] \u0425\u043e\u0441\u0442 {ip}: \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.\\n\")  def identify_service(banner, port):     if banner:         banner = banner.lower()         if \"ftp\" in banner:             return \"FTP\"         elif \"ssh\" in banner:             return \"SSH\"         elif \"http\" in banner:             return \"HTTP\"         elif \"smtp\" in banner:             return \"SMTP\"         elif \"mysql\" in banner:             return \"MySQL\"         elif \"rdp\" in banner or \"remote desktop\" in banner:             return \"RDP\"         elif \"smb\" in banner:             return \"SMB\"         elif \"telnet\" in banner:             return \"Telnet\"     known_ports = {         21: \"FTP\", 22: \"SSH\", 23: \"Telnet\", 25: \"SMTP\", 53: \"DNS\",         80: \"HTTP\", 110: \"POP3\", 139: \"SMB\", 143: \"IMAP\", 443: \"HTTPS\",         3306: \"MySQL\", 3389: \"RDP\", 8080: \"HTTP-Alt\"     }     return known_ports.get(port, \"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\")  def find_vulnerabilities(banner):     banner = banner.lower()     found = []     for vuln_banner, cves in VULNERABILITIES.items():         if vuln_banner in banner:             found.extend(cves)     return found  def main():     banner()     parser = argparse.ArgumentParser(description=\"\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 CVE.\")     parser.add_argument(\"subnet\", help=\"\u041f\u043e\u0434\u0441\u0435\u0442\u044c \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 192.168.1.0\/24\")     parser.add_argument(\"--ports\", help=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0440\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435)\", default=\"21,22,23,25,53,80,110,139,143,443,3306,3389,8080\")     args = parser.parse_args()      try:         port_list = [int(p.strip()) for p in args.ports.split(\",\")]         print(f\"[~] \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0435\u0442\u0438: {args.subnet}\")         scan_network(args.subnet, port_list)     except ValueError:         print(\"[!] \u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438\u043b\u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438.\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u043e\u0432<\/h3>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u043e\u0446.\u0441\u0435\u0442\u044f\u0445 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0430\u0445 \u0421\u041d\u0413<\/h4>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u044b\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u0430\u044f, \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f(\u041d\u0430\u0439\u0434\u0435\u043d\/\u041d\u0435\u0442\/\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f), \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0446.\u0441\u0435\u0442\u0435\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>\u0412\u044b\u0434\u0430\u0447\u0430 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/h4>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u043d\u0438\u0437\u0438\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u0432\u0438\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.** \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u201c\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443\u201d. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u0441 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<pre><code>#!\/usr\/bin\/env python3  import requests import concurrent.futures import argparse import re from bs4 import BeautifulSoup  # \ud83d\udce1 \u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0421\u041d\u0413-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b SITES = {     \"VK\": \"https:\/\/vk.com\/{}\",     \"Telegram\": \"https:\/\/t.me\/{}\",     \"YouTube\": \"https:\/\/www.youtube.com\/@{}\",     \"GitHub\": \"https:\/\/github.com\/{}\" }  HEADERS = {     \"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64)\" }  def fetch_profile_info(site, url, username):     try:         r = requests.get(url, headers=HEADERS, timeout=5)         if r.status_code != 200:             return None          soup = BeautifulSoup(r.text, 'html.parser')         if site == \"VK\":             title = soup.title.string if soup.title else \"\"             match = re.search(r'(.+)\\| \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435', title)             if match:                 return match.group(1).strip()         elif site == \"Telegram\":             desc = soup.find(\"meta\", {\"property\": \"og:description\"})             if desc:                 return desc.get(\"content\", \"\").strip()         elif site == \"YouTube\":             meta = soup.find(\"meta\", {\"name\": \"title\"})             if meta:                 return meta.get(\"content\", \"\").strip()         elif site == \"GitHub\":             name = soup.find(\"span\", class_=\"p-name\")             if name:                 return name.get_text(strip=True)         return None     except Exception:         return None  def check_username(site_name, url_template, username):     url = url_template.format(username)     try:         response = requests.get(url, headers=HEADERS, timeout=5)         if response.status_code == 200:             info = fetch_profile_info(site_name, url, username)             return (site_name, url, \"\u2705 \u041d\u0430\u0439\u0434\u0435\u043d\", info)         elif response.status_code in [301, 302, 403]:             return (site_name, url, \"\u26a0\ufe0f \u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\", None)         else:             return<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-458480","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/458480","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=458480"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/458480\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=458480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=458480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=458480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}