# napalm-fritzbox NAPALM community driver for **AVM FritzBox** routers (read-only, via TR-064). ## Requirements | Dependency | Minimum version | |---|---| | Python | 3.9 | | NAPALM | 4.0 | | fritzconnection | 1.13 | ## Installation ```bash pip install napalm-fritzbox ``` Or from source: ```bash git clone https://github.com/napalm-automation-community/napalm-fritzbox cd napalm-fritzbox pip install -e . ``` ## Quick start ```python 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 ```python 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_power` and `frequency` in `get_radio_status()` are not available via TR-064 and are reported as `0`. ## Development ```bash pip install -e ".[dev]" pytest tests/ ``` ## CI This project includes a GitHub Actions workflow that: - Runs unit tests across Python 3.9–3.12 - Builds sdist and wheel See [.github/workflows/ci.yml](.github/workflows/ci.yml). ## License Apache 2.0 — see [LICENSE](LICENSE).