e352801a1a8a146ce70ff2708055e5a4d6d98985
driver / standard (pull_request) Successful in 17s
driver / lint (pull_request) Successful in 13s
driver / types (pull_request) Successful in 55s
driver / test (3.10) (pull_request) Successful in 5m52s
driver / test (3.11) (pull_request) Successful in 5m58s
driver / test (3.12) (pull_request) Successful in 5m49s
driver / test (3.13) (pull_request) Successful in 5m32s
driver / lowest (pull_request) Successful in 5m19s
driver / security (pull_request) Successful in 47s
driver / build (pull_request) Successful in 22s
CI / driver (pull_request) Successful in 31m5s
driver / publish (pull_request) Skipped
- CI moves to .gitea/workflows/ci.yml and calls the shared driver workflow of NAPALM/driver-standard; .github/ is gone. - napalm-device-types >=4.21.1 from PyPI (the floor was 0.4.0). - LICENSE, CHANGELOG, py.typed, SPDX license string, setuptools>=77, version floors on the dev extra (black is gone), links to git.netork.io; the README names Python 3.10 and the Gitea CI. - mypy strict for the package; napalm_fritzbox.fritzbox is exempt for now (6 errors), recorded in the quality baseline with four long getters. - Coverage floor 81 % (measured 81.36 %).
napalm-fritzbox
NAPALM community driver for AVM FritzBox routers (read-only, via TR-064).
Requirements
| Dependency | Minimum version |
|---|---|
| Python | 3.10 |
| NAPALM | 4.0 |
| napalm-device-types | 4.21.1 |
| fritzconnection | 1.13 |
Installation
pip install napalm-fritzbox
Or from source:
git clone https://git.netork.io/NAPALM/napalm-fritzbox
cd napalm-fritzbox
pip install -e .
Quick start
from napalm import get_network_driver
driver = get_network_driver("fritzbox")
with driver(
"192.168.178.1",
"user",
"pass",
optional_args={"use_tls": True},
) as d:
print(d.get_facts())
print(d.get_wan_status())
print(d.get_hosts())
Example
driver = get_network_driver("fritzbox")
d = driver("fritz.box", "user", "pass")
d.open()
print(d.get_wan_status())
print(d.get_port_forwards())
print(d.get_ssids())
print(d.get_wireless_clients())
d.close()
Optional arguments
| Argument | Default | Description |
|---|---|---|
use_tls |
True |
Use HTTPS (port 49443) instead of HTTP (port 49000) |
port |
49443 / 49000 |
Override the TR-064 port |
FritzBox serves TR-064 over HTTPS with a self-signed certificate; fritzconnection
does not verify it, so no separate verify option is needed.
Limitations
- Read-only: configuration management methods (
load_merge_candidate,commit_config, ...) are not implemented. get_nat_translations()is derived from the enabled port-forwarding rules — TR-064 does not expose a live connection-tracking table.get_vpn_tunnels()returns an empty dict — FritzOS does not expose VPN tunnel status via TR-064.channel_width,tx_powerandfrequencyinget_radio_status()are not available via TR-064 and are reported as0.
Development
The rules are in STANDARDS.md.
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest --cov
CI (.gitea/workflows/ci.yml) calls the shared workflow of the NAPALM driver standard: ruff, mypy, the tests on Python 3.10–3.13, bandit, pip-audit and a build check.
License
Apache 2.0 — see LICENSE.
Languages
Python
100%