Repair docs (html, md). Update docstrings

This commit is contained in:
parent e264750187
commit 6a4ad48577
125 changed files with 3706 additions and 4913 deletions

View file

@ -16,14 +16,26 @@
- Для отправки ARP-кадров могут потребоваться повышенные привилегии или capability на сырой сокет.
"""
import os
import logging
from fastapi import Depends
from scapy.layers.l2 import ARP, Ether
from scapy.sendrecv import srp
import netifaces
from netaddr import IPNetwork
from utils.i18n import get_translations, _
from babel.support import Translations
try:
from scapy.layers.l2 import ARP, Ether
from scapy.sendrecv import srp
except Exception as exc: # pragma: no cover - fallback for doc builds
if os.getenv("SPHINX_BUILD"):
ARP = Ether = None # type: ignore
def srp(*args, **kwargs):
raise RuntimeError("scapy is unavailable during documentation build") from exc
else:
raise
class NetworkScanner:
"""Инициализация сетевого сканера.
@ -41,15 +53,34 @@ class NetworkScanner:
Инициализирует интерфейс, информацию об IP-адресах и локальный MAC-адрес.
"""
self.interface = (
interface or netifaces.gateways()["default"][netifaces.AF_INET][1])
self.ip_info = netifaces.ifaddresses(self.interface).get(
netifaces.AF_INET, [])
self.networks = [
IPNetwork(f"{ip['addr']}/{ip['netmask']}") for ip in self.ip_info
]
self.local_mac = netifaces.ifaddresses(
self.interface)[netifaces.AF_LINK][0]["addr"]
try:
if interface:
self.interface = interface
else:
default_gateway = netifaces.gateways().get("default", {}).get(
netifaces.AF_INET)
if default_gateway:
self.interface = default_gateway[1]
else:
raise KeyError("Default gateway not found")
self.ip_info = netifaces.ifaddresses(self.interface).get(
netifaces.AF_INET, [])
self.networks = [
IPNetwork(f"{ip['addr']}/{ip['netmask']}") for ip in self.ip_info
]
self.local_mac = netifaces.ifaddresses(
self.interface)[netifaces.AF_LINK][0]["addr"]
except Exception as exc:
if os.getenv("SPHINX_BUILD"):
self.interface = interface or "eth0"
self.ip_info = []
self.networks = []
self.local_mac = "00:00:00:00:00:00"
logger = logging.getLogger(__name__)
logger.warning("NetworkScanner falling back to mocked interface during documentation build: %s", exc)
else:
raise
self.translations = translations
def _create_arp_packet(self, target_ip):
@ -126,4 +157,4 @@ class NetworkScanner:
if __name__ == "__main__":
scanner = NetworkScanner()
clients = scanner.scan_network()
scanner.print_clients(clients)
scanner.print_clients(clients)