97 lines
2.1 KiB
Markdown
97 lines
2.1 KiB
Markdown
# 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).
|