74 lines
5.3 KiB
Markdown
74 lines
5.3 KiB
Markdown
# 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 не управлява устройството или правата на текущия потребител
|
||
не позволяват сканиране. |