gonets/SRV/docs/_build/html/api/services/subnet_service.html
2025-10-21 09:20:50 +05:00

690 lines
No EOL
58 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js" lang="en" data-content_root="../../">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="../../genindex.html"><link rel="search" title="Search" href="../../search.html"><link rel="next" title="UFW Service" href="ufw_service.html"><link rel="prev" title="Settings Service" href="settings_service.html">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 -->
<title>Subnet Service - GONETS SRV 0.0.3 documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=8dab3a3b" />
<style>
body {
--color-code-background: #f2f2f2;
--color-code-foreground: #1e1e1e;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"></label>
<label class="overlay toc-overlay" for="__toc"></label>
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
</label>
</div>
<div class="header-center">
<a href="../../index.html"><div class="brand">GONETS SRV 0.0.3 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
<span class="sidebar-brand-text">GONETS SRV 0.0.3 documentation</span>
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<p class="caption" role="heading"><span class="caption-text">Разделы</span></p>
<ul class="current">
<li class="toctree-l1 current has-children"><a class="reference internal" href="../services.html">Сервисы</a><input aria-label="Toggle navigation of Сервисы" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="arp_service.html">ARP Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="auth_service.html">Auth Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="connect_service.html">Connect Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="firewalld_service.html">Firewalld Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="ip_service.html">IP Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="network_service.html">Network Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="settings_service.html">Settings Service</a></li>
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Subnet Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="ufw_service.html">UFW Service</a></li>
<li class="toctree-l2"><a class="reference internal" href="wifi_service.html">Wifi Service</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../models.html">Модели</a><input aria-label="Toggle navigation of Модели" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../models/auth.html">models.auth</a></li>
<li class="toctree-l2"><a class="reference internal" href="../models/network.html">models.network</a></li>
<li class="toctree-l2"><a class="reference internal" href="../models/request.html">models.request</a></li>
<li class="toctree-l2"><a class="reference internal" href="../models/subnet.html">models.subnet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../models/ufw.html">models.ufw</a></li>
<li class="toctree-l2"><a class="reference internal" href="../models/wifi.html">models.wifi</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../endpoints.html">API эндпоинты</a><input aria-label="Toggle navigation of API эндпоинты" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/auth.html">api.v1.auth</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/ip.html">api.v1.ip</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/network.html">api.v1.network</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/settings.html">api.v1.settings</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/subnet.html">api.v1.subnet</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/ufw.html">api.v1.ufw</a></li>
<li class="toctree-l2"><a class="reference internal" href="../endpoints/websocket.html">api.v1.websocket</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../config.html">Конфигурация</a><input aria-label="Toggle navigation of Конфигурация" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../config/cors.html">config.cors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../config/init_config.html">config.init_config</a></li>
<li class="toctree-l2"><a class="reference internal" href="../config/ports.html">config.ports</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../core.html">Core</a><input aria-label="Toggle navigation of Core" class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../core/cli_executor.html">core.cli_executor</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../storage.html">Хранилища</a><input aria-label="Toggle navigation of Хранилища" class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../storage/json_storage.html">storage.json_storage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../storage/session_storage.html">storage.session_storage</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../utils.html">Утилиты</a><input aria-label="Toggle navigation of Утилиты" class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../utils/i18n.html">utils.i18n</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="view-this-page">
<a class="muted-link" href="../../_sources/api/services/subnet_service.rst.txt" title="View this page">
<svg><use href="#svg-eye"></use></svg>
<span class="visually-hidden">View this page</span>
</a>
</div>
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
</label>
</div>
<article role="main" id="furo-main-content">
<section id="module-services.subnet_service">
<span id="subnet-service"></span><h1>Subnet Service<a class="headerlink" href="#module-services.subnet_service" title="Link to this heading"></a></h1>
<dl class="py class">
<dt class="sig sig-object py" id="services.subnet_service.DeviceInfoCollector">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">DeviceInfoCollector</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceInfoCollector"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceInfoCollector" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для сбора информации об устройствах, включая вендоров и хостнеймы.</p>
<dl class="simple">
<dt>Источники данных:</dt><dd><ul class="simple">
<li><p>MacLookup: сопоставление префикса MAC (OUI) с названием производителя.</p></li>
<li><p>DNS: <cite>gethostbyaddr</cite> с малым таймаутом для обратного разрешения имени.</p></li>
<li><p>NetBIOS (nbtscan): опрос сегмента сети для извлечения NetBIOS-имён.</p></li>
</ul>
</dd>
<dt>Политика кэширования:</dt><dd><ul class="simple">
<li><p>Результаты <cite>get_vendor</cite> кэшируются с помощью <cite>functools.lru_cache</cite>.</p></li>
<li><p>Результаты <cite>nbtscan</cite> аккумулируются в словарях <cite>nbtscan_cache</cite>/<cite>nbtscan_results</cite>
на время жизни экземпляра.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceInfoCollector.get_hostname">
<span class="sig-name descname"><span class="pre">get_hostname</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ip</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceInfoCollector.get_hostname"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceInfoCollector.get_hostname" title="Link to this definition"></a></dt>
<dd><p>Получает хостнейм для указанного IP-адреса.</p>
<p>Пробует сначала DNS, затем NetBIOS.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>ip (str): IP-адрес устройства.</p>
</dd>
<dt>Returns:</dt><dd><p>Optional[str]: Хостнейм или None, если не удалось определить.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceInfoCollector.get_vendor">
<span class="sig-name descname"><span class="pre">get_vendor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mac</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceInfoCollector.get_vendor"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceInfoCollector.get_vendor" title="Link to this definition"></a></dt>
<dd><p>Получает вендора устройства по MAC-адресу.</p>
<p>Использует кэширование для повышения производительности.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>mac (str): MAC-адрес устройства.</p>
</dd>
<dt>Returns:</dt><dd><p>str: Название вендора или “Неизвестный” в случае ошибки.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceInfoCollector.scan_nbtscan">
<span class="sig-name descname"><span class="pre">scan_nbtscan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceInfoCollector.scan_nbtscan"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceInfoCollector.scan_nbtscan" title="Link to this definition"></a></dt>
<dd><p>Сканирует подсеть с помощью nbtscan для получения хостнеймов.</p>
<p>Сохраняет результаты в кэш и логирует процесс.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>subnet (str): Подсеть в формате CIDR.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="services.subnet_service.DeviceStorage">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">DeviceStorage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'storage/subnets'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceStorage" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для хранения и управления данными об устройствах.</p>
<dl>
<dt>Формат файла подсети:</dt><dd><p>JSON-структура вида
{</p>
<blockquote>
<div><p>“devices”: [Device, …]</p>
</div></blockquote>
<p>}</p>
</dd>
<dt>Политика очистки:</dt><dd><ul class="simple">
<li><p>Метод <cite>_clean_old_devices</cite> удаляет оффлайн-устройства, не наблюдавшиеся
более 7 дней, чтобы поддерживать актуальность списка.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceStorage.get_subnet_file">
<span class="sig-name descname"><span class="pre">get_subnet_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceStorage.get_subnet_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceStorage.get_subnet_file" title="Link to this definition"></a></dt>
<dd><p>Возвращает путь к файлу для конкретной подсети.</p>
<p>Заменяет символы ‘/’ на ‘_’ для корректного имени файла.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>subnet (str): Подсеть в формате CIDR.</p>
</dd>
<dt>Returns:</dt><dd><p>Path: Путь к файлу.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceStorage.load_devices">
<span class="sig-name descname"><span class="pre">load_devices</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="../models/subnet.html#models.subnet.Device" title="models.subnet.Device"><span class="pre">Device</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceStorage.load_devices"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceStorage.load_devices" title="Link to this definition"></a></dt>
<dd><p>Загружает устройства для указанной подсети.</p>
<p>Читает данные из JSON-файла и фильтрует устаревшие устройства.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>subnet (str): Подсеть в формате CIDR.</p>
</dd>
<dt>Returns:</dt><dd><p>Dict[str, Device]: Словарь устройств с MAC как ключом.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.DeviceStorage.save_devices">
<span class="sig-name descname"><span class="pre">save_devices</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">devices</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="../models/subnet.html#models.subnet.Device" title="models.subnet.Device"><span class="pre">Device</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#DeviceStorage.save_devices"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.DeviceStorage.save_devices" title="Link to this definition"></a></dt>
<dd><p>Сохраняет устройства для указанной подсети.</p>
<p>Записывает данные в JSON-файл.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>subnet (str): Подсеть в формате CIDR.
devices (List[Device]): Список устройств для сохранения.</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка при сохранении.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="services.subnet_service.NetworkScanner">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">NetworkScanner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interface</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#NetworkScanner"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.NetworkScanner" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для сканирования подсети с использованием ARP-запросов.</p>
<dl class="simple">
<dt>Назначение:</dt><dd><p>Обнаруживает активные устройства в локальной сети, отправляя широковещательные
ARP-запросы по указанной подсети и собирая ответы (IP, MAC).</p>
</dd>
<dt>Детали реализации:</dt><dd><ul class="simple">
<li><p>Использует <cite>scapy</cite> (<cite>Ether</cite> + <cite>ARP</cite>) для генерации пакетов и <cite>srp</cite> для
отправки/получения на канальном уровне от имени заданного интерфейса.</p></li>
<li><p>Таймаут ожидания ответа короткий (2 секунды), ориентирован на интерактивные
сценарии UI.</p></li>
</ul>
</dd>
<dt>Ограничения и замечания:</dt><dd><ul class="simple">
<li><p>Требуются права для отправки низкоуровневых пакетов (capabilities/root).</p></li>
<li><p>В сетях с фильтрацией широковещания количество обнаруженных устройств
может быть ограничено.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.NetworkScanner.scan">
<span class="sig-name descname"><span class="pre">scan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#NetworkScanner.scan"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.NetworkScanner.scan" title="Link to this definition"></a></dt>
<dd><p>Сканирует подсеть с использованием ARP-запросов.</p>
<p>Отправляет ARP-пакеты для обнаружения активных устройств и возвращает
список кортежей (IP, MAC).</p>
<dl class="simple">
<dt>Args:</dt><dd><p>subnet (str): Подсеть в формате CIDR (например, “10.1.1.0/24”).</p>
</dd>
<dt>Returns:</dt><dd><p>List[Tuple[str, str]]: Список кортежей (IP-адрес, MAC-адрес) обнаруженных устройств.</p>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка сканирования.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="services.subnet_service.PortScanner">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">PortScanner</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interface</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#PortScanner"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.PortScanner" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Класс для сканирования открытых портов на устройствах.</p>
<dl class="simple">
<dt>Назначение:</dt><dd><p>Плейсхолдер для будущего функционала активного сканирования TCP/UDP-портов
у обнаруженных узлов. В текущей версии возвращает пустой список.</p>
</dd>
<dt>План развития:</dt><dd><ul class="simple">
<li><p>Добавить неблокирующее сканирование наиболее распространённых портов
(22, 80, 443 и т.д.) с ограничением по времени.</p></li>
<li><p>Настраиваемые профили глубины и скорости сканирования.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.PortScanner.scan">
<span class="sig-name descname"><span class="pre">scan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ip</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#PortScanner.scan"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.PortScanner.scan" title="Link to this definition"></a></dt>
<dd><p>Сканирует открытые порты на указанном IP-адресе.</p>
<p>Пока возвращает пустой список, так как функциональность не реализована.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>ip (str): IP-адрес устройства для сканирования.</p>
</dd>
<dt>Returns:</dt><dd><p>List[str]: Список открытых портов (пока пустой).</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="services.subnet_service.SubnetService">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">SubnetService</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#SubnetService"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.SubnetService" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Сервис для сканирования подсетей и управления устройствами.</p>
<dl class="simple">
<dt>Роль сервиса:</dt><dd><p>Объединяет сетевое сканирование (ARP), сбор дополнительной информации
(вендор, хостнейм), слияние с кэшем предыдущих результатов и персистентное
хранение данных по подсетям. Предоставляет вспомогательные операции для
локального узла и работы с заметками устройств.</p>
</dd>
<dt>Поток выполнения скана (<cite>scan_subnet</cite>):</dt><dd><ol class="arabic simple">
<li><p>Определение подсети (вручную или авто по интерфейсу).</p></li>
<li><p>Загрузка ранее сохранённых устройств подсети.</p></li>
<li><p>Добавление локального устройства (если принадлежит подсети).</p></li>
<li><p>ARP-сканирование и параллельная обработка узлов (обогащение данных).</p></li>
<li><p>Маркировка оффлайн-узлов из кэша, не встреченных в текущем скане.</p></li>
<li><p>Сортировка по IP и сохранение объединённого списка в JSON.</p></li>
</ol>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.SubnetService.add_note">
<span class="sig-name descname"><span class="pre">add_note</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mac</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">note</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">bool</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Dict</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#SubnetService.add_note"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.SubnetService.add_note" title="Link to this definition"></a></dt>
<dd><p>Добавляет заметку для устройства по MAC-адресу.</p>
<p>Привязывает заметку к устройству, если оно существует.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>mac (str): MAC-адрес устройства.
note (str): Текст заметки.
translations (Translations): Объект переводов для текущего языка.</p>
</dd>
<dt>Returns:</dt><dd><dl class="simple">
<dt>Tuple[bool, Optional[Tuple[str, Dict]]]: Кортеж (успех, результат),</dt><dd><p>где результат содержит код ошибки/успеха и данные.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.SubnetService.delete_note">
<span class="sig-name descname"><span class="pre">delete_note</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mac</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">bool</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Dict</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#SubnetService.delete_note"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.SubnetService.delete_note" title="Link to this definition"></a></dt>
<dd><p>Удаляет заметку для устройства по MAC-адресу.</p>
<p>Удаляет привязанную заметку, если она существует.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>mac (str): MAC-адрес устройства.
translations (Translations): Объект переводов для текущего языка.</p>
</dd>
<dt>Returns:</dt><dd><dl class="simple">
<dt>Tuple[bool, Optional[Tuple[str, Dict]]]: Кортеж (успех, результат),</dt><dd><p>где результат содержит код ошибки/успеха и данные.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.SubnetService.scan_subnet">
<span class="sig-name descname"><span class="pre">scan_subnet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">subnet</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="../models/subnet.html#models.subnet.SubnetScanResult" title="models.subnet.SubnetScanResult"><span class="pre">SubnetScanResult</span></a></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#SubnetService.scan_subnet"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.SubnetService.scan_subnet" title="Link to this definition"></a></dt>
<dd><p>Сканирует указанную подсеть и возвращает результаты.</p>
<p>Выполняет ARP-сканирование, собирает информацию о устройствах и сохраняет данные.</p>
<dl class="simple">
<dt>Args:</dt><dd><dl class="simple">
<dt>subnet (Optional[str]): Подсеть в формате CIDR (например, “10.1.1.0/24”).</dt><dd><p>Если None или пустая строка, определяется автоматически.</p>
</dd>
</dl>
</dd>
<dt>Returns:</dt><dd><dl class="simple">
<dt>SubnetScanResult: Объект с результатами сканирования, содержащий список</dt><dd><p>устройств или сообщение об ошибке.</p>
</dd>
</dl>
</dd>
<dt>Raises:</dt><dd><p>Exception: Если произошла ошибка сканирования.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="services.subnet_service.SubnetService.update_note">
<span class="sig-name descname"><span class="pre">update_note</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mac</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">note</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">bool</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Dict</span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/services/subnet_service.html#SubnetService.update_note"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.SubnetService.update_note" title="Link to this definition"></a></dt>
<dd><p>Обновляет заметку для устройства по MAC-адресу.</p>
<p>Изменяет существующую заметку, если она есть.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>mac (str): MAC-адрес устройства.
note (str): Новый текст заметки.
translations (Translations): Объект переводов для текущего языка.</p>
</dd>
<dt>Returns:</dt><dd><dl class="simple">
<dt>Tuple[bool, Optional[Tuple[str, Dict]]]: Кортеж (успех, результат),</dt><dd><p>где результат содержит код ошибки/успеха и данные.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="services.subnet_service.get_subnet_service">
<span class="sig-prename descclassname"><span class="pre">services.subnet_service.</span></span><span class="sig-name descname"><span class="pre">get_subnet_service</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Translations</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Depends(translations_dependency)</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/services/subnet_service.html#get_subnet_service"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#services.subnet_service.get_subnet_service" title="Link to this definition"></a></dt>
<dd><p>Фабричная функция для создания экземпляра SubnetService.</p>
<p>Использует зависимости FastAPI для получения объекта переводов и возвращает
экземпляр SubnetService с текущей локализацией.</p>
<dl class="simple">
<dt>Args:</dt><dd><p>translations (Translations): Объект переводов для текущего языка.</p>
</dd>
<dt>Returns:</dt><dd><p>SubnetService: Экземпляр сервиса для работы с подсетями.</p>
</dd>
</dl>
</dd></dl>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="ufw_service.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">UFW Service</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="settings_service.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Settings Service</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
Copyright &#169; 2025, GONETS
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Subnet Service</a><ul>
<li><a class="reference internal" href="#services.subnet_service.DeviceInfoCollector"><code class="docutils literal notranslate"><span class="pre">DeviceInfoCollector</span></code></a><ul>
<li><a class="reference internal" href="#services.subnet_service.DeviceInfoCollector.get_hostname"><code class="docutils literal notranslate"><span class="pre">DeviceInfoCollector.get_hostname()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.DeviceInfoCollector.get_vendor"><code class="docutils literal notranslate"><span class="pre">DeviceInfoCollector.get_vendor()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.DeviceInfoCollector.scan_nbtscan"><code class="docutils literal notranslate"><span class="pre">DeviceInfoCollector.scan_nbtscan()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#services.subnet_service.DeviceStorage"><code class="docutils literal notranslate"><span class="pre">DeviceStorage</span></code></a><ul>
<li><a class="reference internal" href="#services.subnet_service.DeviceStorage.get_subnet_file"><code class="docutils literal notranslate"><span class="pre">DeviceStorage.get_subnet_file()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.DeviceStorage.load_devices"><code class="docutils literal notranslate"><span class="pre">DeviceStorage.load_devices()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.DeviceStorage.save_devices"><code class="docutils literal notranslate"><span class="pre">DeviceStorage.save_devices()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#services.subnet_service.NetworkScanner"><code class="docutils literal notranslate"><span class="pre">NetworkScanner</span></code></a><ul>
<li><a class="reference internal" href="#services.subnet_service.NetworkScanner.scan"><code class="docutils literal notranslate"><span class="pre">NetworkScanner.scan()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#services.subnet_service.PortScanner"><code class="docutils literal notranslate"><span class="pre">PortScanner</span></code></a><ul>
<li><a class="reference internal" href="#services.subnet_service.PortScanner.scan"><code class="docutils literal notranslate"><span class="pre">PortScanner.scan()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#services.subnet_service.SubnetService"><code class="docutils literal notranslate"><span class="pre">SubnetService</span></code></a><ul>
<li><a class="reference internal" href="#services.subnet_service.SubnetService.add_note"><code class="docutils literal notranslate"><span class="pre">SubnetService.add_note()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.SubnetService.delete_note"><code class="docutils literal notranslate"><span class="pre">SubnetService.delete_note()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.SubnetService.scan_subnet"><code class="docutils literal notranslate"><span class="pre">SubnetService.scan_subnet()</span></code></a></li>
<li><a class="reference internal" href="#services.subnet_service.SubnetService.update_note"><code class="docutils literal notranslate"><span class="pre">SubnetService.update_note()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#services.subnet_service.get_subnet_service"><code class="docutils literal notranslate"><span class="pre">get_subnet_service()</span></code></a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script src="../../_static/documentation_options.js?v=47de8214"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/scripts/furo.js?v=46bd48cc"></script>
</body>
</html>