christianmanivong efe253dc42
driver / standard (push) Successful in 15s
driver / types (push) Failing after 5s
driver / lint (push) Successful in 13s
driver / test (3.10) (push) Successful in 5m54s
driver / test (3.11) (push) Successful in 5m51s
driver / test (3.12) (push) Successful in 5m52s
driver / security (push) Successful in 58s
driver / build (push) Successful in 23s
driver / lowest (push) Successful in 5m20s
driver / test (3.13) (push) Successful in 5m44s
CI / driver (push) Failing after 11m54s
driver / publish (push) Skipped
Merge pull request 'chore: adopt the NAPALM driver standard' (#7) from chore/driver-standard into main
2026-10-23 12:53:46 +00:00
2026-06-13 03:18:28 +02:00
2026-10-23 11:37:04 +02:00
2026-10-23 11:37:04 +02:00

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_power and frequency in get_radio_status() are not available via TR-064 and are reported as 0.

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.

S
Description
No description provided
Readme
171 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 100%