Add network diagnostic reports

This commit is contained in:
dido committed 2026-09-29 11:25:33 +03:00
1 parent a23fc775e3
commit 43518d51cc
4 files changed
+756 -3

No files matched your search

+74
View File
@@ -0,0 +1,74 @@
# network-diagnostic.sh
Показва подробна информация за мрежовите интерфейси и хардуерните карти,
след което сканира околните Wi-Fi мрежи и извежда до десетте най-силни.
## Какво прави
За всеки интерфейс показва типа и състоянието, MAC и IP адресите, MTU,
активната NetworkManager връзка, скоростта и наличните link modes. За
физическите PCI/USB устройства показва модел, bus и драйвер; `lspci` добавя
PCI описанието и kernel module информацията. Ако е наличен `ethtool`, се
показват Ethernet скоростта и състоянието на link-а; използва се и скоростта,
публикувана от драйвера в sysfs. Виртуалните интерфейси не се представят като
физически Ethernet връзки и не получават подвеждаща скорост от veth/bridge.
Изходът е подреден като физически Ethernet, физически Wi-Fi, веднага след
тях топ 10 Wi-Fi scan, и накрая виртуалните интерфейси.
Wi-Fi scan използва NetworkManager и заявява нов scan. Резултатите се
сортират по сила на сигнала и се показват най-много десет различни SSID;
ако едно SSID се вижда през няколко access point-а, показва се най-силният.
В списъка има BSSID, канал, честота, сигнал и тип защита. Свързаната точка
за достъп се отбелязва като `CONNECTED` и се оцветява в зелено в терминала;
в HTML целият ред е оцветен. При няколко access point-а със същото SSID
свързаният BSSID се запазва пред по-силен несвързан. При липса на
NetworkManager се използва `iw` като fallback, ако е инсталиран и има права
за scan.
Скриптът е само за преглед и не променя мрежови настройки. След показването
на TXT отчета интерактивно предлага запис в `~/report.txt`. Може да се зададе
друг път и формат; поддържат се TXT, JSON и HTML.
## Изисквания
- Linux, Bash и Python 3
- `ip` е задължителен за инвентара на интерфейсите
- `nmcli` от NetworkManager се препоръчва за Wi-Fi scan
- `lspci` и `ethtool` са незадължителни и добавят хардуерни/link детайли
- `iw` е незадължителен fallback за Wi-Fi scan; някои драйвери изискват root
права за сканиране с `iw`
- За `nmcli` обикновено не са нужни root права
## Употреба
```bash
./System/network-diagnostic.sh
./System/network-diagnostic.sh --help
./System/network-diagnostic.sh --output "$HOME/network-report.json" --format json
./System/network-diagnostic.sh --output /tmp/network-report.html --force
./System/network-diagnostic.sh --format json
```
| Опция | Описание |
|-------|----------|
| `-o`, `--output PATH` | Записва директно във файл; без тази опция предлага интерактивен запис |
| `-f`, `--format FORMAT` | Формат `txt`, `json` или `html`; без `--output` извежда формата към stdout в non-interactive режим |
| `--force` | Позволява презапис на съществуващ файл без потвърждение |
| `-h`, `--help` | Показва помощта и приключва |
Без зададен `--format` форматът се разпознава от разширението на `--output`;
ако няма поддържано разширение, се използва TXT. При интерактивен запис
началният път е `~/report.<format>`, като форматът по подразбиране е TXT.
В non-interactive режим без `--output` отчетът се извежда към stdout; зададеният
`--format` определя сериализацията.
## Ограничения
Скриптът показва до десет уникални SSID, а не десет отделни BSSID; при
еднакво име се избира access point-ът с най-силен сигнал. Скритите мрежи
нямат SSID и се третират отделно по BSSID. Детайлите за PCI устройства
зависят от `lspci`, за USB устройствата от sysfs, а Ethernet link modes
зависят от `ethtool` и драйвера. Wi-Fi scan може да не се изпълни, ако
NetworkManager не управлява устройството или правата на текущия потребител
не позволяват сканиране.