Repair docs (html, md). Update docstrings
This commit is contained in:
parent
e264750187
commit
6a4ad48577
125 changed files with 3706 additions and 4913 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue