Утилита для упрощения генерации доков
This commit is contained in:
parent
ab38a0db50
commit
752604b20b
11 changed files with 234 additions and 45 deletions
|
|
@ -301,6 +301,8 @@
|
|||
<span class="kn">from</span><span class="w"> </span><span class="nn">utils.i18n</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_translations</span><span class="p">,</span> <span class="n">_</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">babel.support</span><span class="w"> </span><span class="kn">import</span> <span class="n">Translations</span>
|
||||
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.layers.l2</span><span class="w"> </span><span class="kn">import</span> <span class="n">ARP</span><span class="p">,</span> <span class="n">Ether</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">scapy.sendrecv</span><span class="w"> </span><span class="kn">import</span> <span class="n">srp</span>
|
||||
|
|
@ -332,35 +334,57 @@
|
|||
|
||||
<span class="sd"> Инициализирует интерфейс, информацию об IP-адресах и локальный MAC-адрес.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">interface</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">interface</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">default_gateway</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">gateways</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default"</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">default_gateway</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">default_gateway</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s2">"Default gateway not found"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">IPNetwork</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'addr'</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'netmask'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span>
|
||||
<span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)[</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_LINK</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"addr"</span><span class="p">]</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">candidate_interface</span> <span class="o">=</span> <span class="n">interface</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidate_interface</span><span class="p">:</span>
|
||||
<span class="n">gateways</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">gateways</span><span class="p">()</span>
|
||||
<span class="n">default_gateway</span> <span class="o">=</span> <span class="n">gateways</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default"</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">default_gateway</span><span class="p">:</span>
|
||||
<span class="n">candidate_interface</span> <span class="o">=</span> <span class="n">default_gateway</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">iface</span> <span class="ow">in</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">interfaces</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">iface</span> <span class="o">==</span> <span class="s2">"lo"</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">addrs</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="n">iface</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span> <span class="ow">in</span> <span class="n">addrs</span> <span class="ow">and</span> <span class="n">addrs</span><span class="p">[</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">]:</span>
|
||||
<span class="n">candidate_interface</span> <span class="o">=</span> <span class="n">iface</span>
|
||||
<span class="k">break</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">candidate_interface</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">candidate_interface</span>
|
||||
<span class="n">addresses</span> <span class="o">=</span> <span class="n">netifaces</span><span class="o">.</span><span class="n">ifaddresses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="n">addresses</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">IPNetwork</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'addr'</span><span class="p">]</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">ip</span><span class="p">[</span><span class="s1">'netmask'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="p">)</span> <span class="k">for</span> <span class="n">ip</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="k">if</span> <span class="n">ip</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"addr"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">ip</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"netmask"</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
<span class="n">link_info</span> <span class="o">=</span> <span class="n">addresses</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">netifaces</span><span class="o">.</span><span class="n">AF_LINK</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="k">if</span> <span class="n">link_info</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="n">link_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"addr"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
||||
<span class="s2">"NetworkScanner: IPv4 интерфейс не найден, сканирование будет недоступно"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">"SPHINX_BUILD"</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="n">interface</span> <span class="ow">or</span> <span class="s2">"eth0"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span> <span class="o">=</span> <span class="s2">"00:00:00:00:00:00"</span>
|
||||
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"NetworkScanner falling back to mocked interface during documentation build: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">exc</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
||||
<span class="s2">"NetworkScanner falling back to mocked interface during documentation build: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span>
|
||||
<span class="n">exc</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"NetworkScanner инициализация завершилась ошибкой: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">exc</span><span class="p">)</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_create_arp_packet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target_ip</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Создаёт ARP-пакет для отправки на указанный IP-адрес.</span>
|
||||
|
|
@ -393,6 +417,16 @@
|
|||
<span class="sd"> Note:</span>
|
||||
<span class="sd"> Учитывает локальные IP-адреса интерфейса и удаляет дубликаты.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">networks</span> <span class="ow">or</span> <span class="n">ARP</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">Ether</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">fallback_clients</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">ip_info</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span><span class="p">:</span>
|
||||
<span class="n">fallback_clients</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
||||
<span class="s2">"ip"</span><span class="p">:</span> <span class="n">ip_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"addr"</span><span class="p">),</span>
|
||||
<span class="s2">"mac"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span><span class="p">,</span>
|
||||
<span class="p">})</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">client</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">fallback_clients</span> <span class="k">if</span> <span class="n">client</span><span class="p">[</span><span class="s2">"ip"</span><span class="p">]]</span>
|
||||
|
||||
<span class="n">all_clients</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">network</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">networks</span><span class="p">:</span>
|
||||
|
|
@ -413,7 +447,12 @@
|
|||
<span class="n">all_clients</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">clients</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">ip_info</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ip_info</span><span class="p">:</span>
|
||||
<span class="n">local_client</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ip"</span><span class="p">:</span> <span class="n">ip_info</span><span class="p">[</span><span class="s2">"addr"</span><span class="p">],</span> <span class="s2">"mac"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ip_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"addr"</span><span class="p">):</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">local_client</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"ip"</span><span class="p">:</span> <span class="n">ip_info</span><span class="p">[</span><span class="s2">"addr"</span><span class="p">],</span>
|
||||
<span class="s2">"mac"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">local_mac</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">local_client</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">all_clients</span><span class="p">:</span>
|
||||
<span class="n">all_clients</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">local_client</span><span class="p">)</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -310,13 +310,19 @@
|
|||
<span class="sd"> Предоставляет методы для подключения, отключения и проверки статуса Wi-Fi соединений.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Translations</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_translations</span><span class="p">())):</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">translations</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Translations</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""Инициализирует сервис Wi-Fi.</span>
|
||||
|
||||
<span class="sd"> Автоматически определяет доступный Wi-Fi-интерфейс и сохраняет его имя.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_wifi_interface</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
<span class="k">if</span> <span class="n">translations</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">Translations</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"locales"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"ru"</span><span class="p">],</span> <span class="s2">"messages"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">Translations</span><span class="p">()</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">translations</span> <span class="o">=</span> <span class="n">translations</span>
|
||||
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">_get_wifi_interface</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="w"> </span><span class="sd">"""Автоматически определяет Wi-Fi-интерфейс.</span>
|
||||
|
|
@ -329,17 +335,27 @@
|
|||
<span class="sd"> Exception: Если произошла ошибка при выполнении команд nmcli.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"radio"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"enabled"</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">interfaces</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"status"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">interfaces</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="s2">"wifi"</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="s2">"connected"</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">iface</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using Wi-Fi interface: </span><span class="si">{</span><span class="n">iface</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">iface</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Wi-Fi interface not found or not connected"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"wlan0"</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wi-Fi radio is disabled"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"radio"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"enabled"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wi-Fi radio is disabled"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
|
||||
<span class="n">interfaces_output</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"status"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">stdout</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">interfaces_output</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">parts</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">device_name</span><span class="p">,</span> <span class="n">device_type</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">device_type</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"wifi"</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using Wi-Fi interface: </span><span class="si">{</span><span class="n">device_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">device_name</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Wi-Fi interface not found in `nmcli device status` output"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error detecting Wi-Fi interface: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
|
|
@ -367,20 +383,64 @@
|
|||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Wi-Fi-интерфейс не доступен"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"-f"</span><span class="p">,</span> <span class="s2">"SSID"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">],</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"-f"</span><span class="p">,</span> <span class="s2">"SSID"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">],</span>
|
||||
<span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ssid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">stdout</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> не найдена в списке доступных сетей"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
|
||||
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"device"</span><span class="p">,</span> <span class="s2">"wifi"</span><span class="p">,</span> <span class="s2">"connect"</span><span class="p">,</span> <span class="n">ssid</span><span class="p">,</span> <span class="s2">"password"</span><span class="p">,</span> <span class="n">password</span><span class="p">]</span>
|
||||
<span class="n">process</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">run_connect</span><span class="p">()</span> <span class="o">-></span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CompletedProcess</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="s2">"nmcli"</span><span class="p">,</span>
|
||||
<span class="s2">"device"</span><span class="p">,</span>
|
||||
<span class="s2">"wifi"</span><span class="p">,</span>
|
||||
<span class="s2">"connect"</span><span class="p">,</span>
|
||||
<span class="n">ssid</span><span class="p">,</span>
|
||||
<span class="s2">"ifname"</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">interface</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">password</span><span class="p">:</span>
|
||||
<span class="n">cmd</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">"password"</span><span class="p">,</span> <span class="n">password</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">check</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
|
||||
<span class="n">process</span> <span class="o">=</span> <span class="n">run_connect</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">process</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"secrets were required"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"authentication failed"</span> <span class="ow">in</span> <span class="n">error_msg</span> <span class="ow">or</span> <span class="s2">"802-11-wireless-security.psk: недействительное свойство"</span> <span class="ow">in</span> <span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Неверный пароль"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="n">key_mgmt_error</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"secrets were required"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"authentication failed"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"802-11-wireless-security.psk"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"key-mgmt"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">key_mgmt_error</span><span class="p">:</span>
|
||||
<span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="s2">"nmcli"</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="s2">"delete"</span><span class="p">,</span> <span class="s2">"id"</span><span class="p">,</span> <span class="n">ssid</span><span class="p">],</span>
|
||||
<span class="n">capture_output</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">retry_process</span> <span class="o">=</span> <span class="n">run_connect</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">retry_process</span><span class="o">.</span><span class="n">returncode</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully connected to network </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2"> after profile reset"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="n">error_msg</span> <span class="o">=</span> <span class="n">retry_process</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="p">(</span>
|
||||
<span class="s2">"secrets were required"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"authentication failed"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"802-11-wireless-security.psk"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="ow">or</span> <span class="s2">"key-mgmt"</span> <span class="ow">in</span> <span class="n">error_msg</span>
|
||||
<span class="p">):</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Неверный пароль или тип безопасности"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"no network with ssid"</span> <span class="ow">in</span> <span class="n">error_msg</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> недоступна или неверно указана"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="n">retry_process</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="s2">"no network with ssid"</span> <span class="ow">in</span> <span class="n">error_msg</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: Сеть с SSID </span><span class="si">{ssid}</span><span class="s2"> недоступна или неверно указана"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">translations</span><span class="o">.</span><span class="n">gettext</span><span class="p">(</span><span class="s2">"Ошибка подключения к </span><span class="si">{ssid}</span><span class="s2">: </span><span class="si">{error}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ssid</span><span class="o">=</span><span class="n">ssid</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="n">process</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
|
||||
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully connected to network </span><span class="si">{</span><span class="n">ssid</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue