Christian Manivong c5d0b0d0f6
driver / standard (pull_request) Successful in 16s
driver / lint (pull_request) Successful in 13s
driver / types (pull_request) Successful in 47s
driver / test (3.10) (pull_request) Successful in 5m50s
driver / test (3.11) (pull_request) Successful in 5m47s
driver / test (3.12) (pull_request) Successful in 5m47s
driver / security (pull_request) Successful in 1m7s
driver / build (pull_request) Successful in 28s
driver / lowest (pull_request) Successful in 5m26s
driver / test (3.13) (pull_request) Successful in 5m50s
CI / driver (pull_request) Successful in 12m9s
driver / publish (pull_request) Skipped
chore(release): 0.3.0
2026-10-23 11:37:04 +02: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%