![Build](https://github.com/dmachard/python-unbound-console/workflows/Build/badge.svg) ![Testing](https://github.com/dmachard/python-unbound-console/workflows/Testing/badge.svg) ![Pypi](https://github.com/dmachard/python-unbound-console/workflows/Publish/badge.svg)
# Python console for unbound server
## Table of contents
* [Installation](#installation)
* [Remote Control on Unbound](#remote-control-on-unbound)
* [Execute command](#execute-command)
* [Loading zone from YAML file](#loading-zone-from-yaml-file)
* [Loading zone from "LocalZone" object](#loading-zone-from-localzone-object)
* [Execute bulk command](#execute-bulk-command)
## Installation
![python 3.12.x](https://img.shields.io/badge/python%203.12.x-tested-blue) ![python 3.11.x](https://img.shields.io/badge/python%203.11.x-tested-blue) ![python 3.10.x](https://img.shields.io/badge/python%203.10.x-tested-blue) ![python 3.9.x](https://img.shields.io/badge/python%203.9.x-tested-blue) ![python 3.8.x](https://img.shields.io/badge/python%203.8.x-tested-blue)
This module can be installed from [pypi](https://pypi.org/project/unbound_console/) website.
This command will install the module with yaml support for loading zone data.
```python
pip install unbound_console[yaml]
```
If loading a zone using yaml is not required use the following command, zone data can instead be loaded through the `LocalZone` object:
```python
pip install unbound_console
```
## Remote Control on Unbound
![unbound 1.20.x](https://img.shields.io/badge/unbound%201.20.x-tested-green) ![unbound 1.19.x](https://img.shields.io/badge/unbound%201.19.x-tested-green) ![unbound 1.18.x](https://img.shields.io/badge/unbound%201.18.x-tested-green) ![unbound 1.17.x](https://img.shields.io/badge/unbound%201.17.x-tested-green) ![unbound 1.16.x](https://img.shields.io/badge/unbound%201.16.x-tested-green) ![unbound 1.15.x](https://img.shields.io/badge/unbound%201.15.x-tested-green) ![unbound 1.14.x](https://img.shields.io/badge/unbound%201.14.x-tested-green) ![unbound 1.13.x](https://img.shields.io/badge/unbound%201.13.x-tested-green) ![unbound 1.12.x](https://img.shields.io/badge/unbound%201.12.x-tested-green)
Before to use this utility. You must activate the remote control on your unbound server.
See [config file](https://github.com/dmachard/python-unbound-console/blob/master/testsdata/unbound_tls.conf) example.
### Execute command
You can execute commands with the function `send_command`. See [nlnetlabs documentations](https://www.nlnetlabs.nl/documentation/unbound/unbound-control/) for the full list of available commands.
- Import the module in your code
```python
from unbound_console import RemoteControl
```
> An asyncio implementation is available, use `RemoteControlAsync` instead.
- Configure the remote control client with tls support. You can also provide a unix socket `unix_sock="/var/run/unbound-console.sock"`.
```python
rc = RemoteControl(host="127.0.0.1", port=8953,
server_cert = "/etc/unbound/unbound_server.pem",
client_cert= "/etc/unbound/unbound_control.pem",
client_key= "/etc/unbound/unbound_control.key")
```
- Execute a command and get output
```python
o = rc.send_command(cmd="status")
print(o)
```
### Loading zone from YAML file
YAML zone definition example:
> This requires installing unbound_console with yaml support
```
zone:
name: home.
type: static
records:
- "router.home. 86400 IN A 192.168.0.1"
- "192.168.0.1 86400 IN PTR router.test."
```
Call `load_zone` with the yaml file to load-it in your unbound server.
```python
o = rc.load_zone(zone_data='<yaml content>')
print(o)
```
### Loading zone from "LocalZone" object
Example loading from a `LocalZone` object:
```python
from unbound_console import LocalZone
zone = LocalZone(
name="home",
type="static",
records=[
"router.home. 86400 IN A 192.168.0.1",
"192.168.0.1 86400 IN PTR router.test.",
],
)
o = rc.load_zone(zone_data=zone)
print(o)
```
### Execute bulk command
```python
domains_bulk = []
domains_bulk.append( "www.google.com always_nxdomain")
o = rc.send_command(cmd="local_zones", data_list=domains_bulk)
print(o)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/dmachard/unbound-console",
"name": "unbound-console",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "unbound console control remote client",
"author": "Denis MACHARD",
"author_email": "d.machard@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/5a/ef/07735326409eb96ddedce2369462881ee943f149f5de81ff002a22471cbe/unbound_console-0.6.4.tar.gz",
"platform": "any",
"description": "![Build](https://github.com/dmachard/python-unbound-console/workflows/Build/badge.svg) ![Testing](https://github.com/dmachard/python-unbound-console/workflows/Testing/badge.svg) ![Pypi](https://github.com/dmachard/python-unbound-console/workflows/Publish/badge.svg)\n\n# Python console for unbound server\n\n## Table of contents\n* [Installation](#installation)\n* [Remote Control on Unbound](#remote-control-on-unbound)\n* [Execute command](#execute-command)\n* [Loading zone from YAML file](#loading-zone-from-yaml-file)\n* [Loading zone from \"LocalZone\" object](#loading-zone-from-localzone-object)\n* [Execute bulk command](#execute-bulk-command)\n\n## Installation\n\n![python 3.12.x](https://img.shields.io/badge/python%203.12.x-tested-blue) ![python 3.11.x](https://img.shields.io/badge/python%203.11.x-tested-blue) ![python 3.10.x](https://img.shields.io/badge/python%203.10.x-tested-blue) ![python 3.9.x](https://img.shields.io/badge/python%203.9.x-tested-blue) ![python 3.8.x](https://img.shields.io/badge/python%203.8.x-tested-blue)\n\nThis module can be installed from [pypi](https://pypi.org/project/unbound_console/) website.\n\nThis command will install the module with yaml support for loading zone data.\n\n```python\npip install unbound_console[yaml]\n```\n\nIf loading a zone using yaml is not required use the following command, zone data can instead be loaded through the `LocalZone` object:\n\n```python\npip install unbound_console\n```\n\n## Remote Control on Unbound\n\n![unbound 1.20.x](https://img.shields.io/badge/unbound%201.20.x-tested-green) ![unbound 1.19.x](https://img.shields.io/badge/unbound%201.19.x-tested-green) ![unbound 1.18.x](https://img.shields.io/badge/unbound%201.18.x-tested-green) ![unbound 1.17.x](https://img.shields.io/badge/unbound%201.17.x-tested-green) ![unbound 1.16.x](https://img.shields.io/badge/unbound%201.16.x-tested-green) ![unbound 1.15.x](https://img.shields.io/badge/unbound%201.15.x-tested-green) ![unbound 1.14.x](https://img.shields.io/badge/unbound%201.14.x-tested-green) ![unbound 1.13.x](https://img.shields.io/badge/unbound%201.13.x-tested-green) ![unbound 1.12.x](https://img.shields.io/badge/unbound%201.12.x-tested-green)\n\nBefore to use this utility. You must activate the remote control on your unbound server.\nSee [config file](https://github.com/dmachard/python-unbound-console/blob/master/testsdata/unbound_tls.conf) example.\n\n### Execute command\n\nYou can execute commands with the function `send_command`. See [nlnetlabs documentations](https://www.nlnetlabs.nl/documentation/unbound/unbound-control/) for the full list of available commands.\n\n- Import the module in your code\n\n```python\nfrom unbound_console import RemoteControl\n```\n\n> An asyncio implementation is available, use `RemoteControlAsync` instead.\n\n- Configure the remote control client with tls support. You can also provide a unix socket `unix_sock=\"/var/run/unbound-console.sock\"`.\n\n```python\nrc = RemoteControl(host=\"127.0.0.1\", port=8953,\n server_cert = \"/etc/unbound/unbound_server.pem\",\n client_cert= \"/etc/unbound/unbound_control.pem\",\n client_key= \"/etc/unbound/unbound_control.key\")\n```\n\n- Execute a command and get output\n\n```python\no = rc.send_command(cmd=\"status\")\nprint(o)\n```\n\n### Loading zone from YAML file\n\nYAML zone definition example:\n\n> This requires installing unbound_console with yaml support\n\n```\nzone:\n name: home.\n type: static\n records:\n - \"router.home. 86400 IN A 192.168.0.1\"\n - \"192.168.0.1 86400 IN PTR router.test.\"\n```\n\nCall `load_zone` with the yaml file to load-it in your unbound server.\n\n```python\no = rc.load_zone(zone_data='<yaml content>')\nprint(o)\n```\n\n### Loading zone from \"LocalZone\" object\n\nExample loading from a `LocalZone` object:\n\n```python\nfrom unbound_console import LocalZone\n\nzone = LocalZone(\n name=\"home\",\n type=\"static\",\n records=[\n \"router.home. 86400 IN A 192.168.0.1\",\n \"192.168.0.1 86400 IN PTR router.test.\",\n ],\n)\no = rc.load_zone(zone_data=zone)\nprint(o)\n```\n\n### Execute bulk command\n\n```python\ndomains_bulk = []\ndomains_bulk.append( \"www.google.com always_nxdomain\")\n\no = rc.send_command(cmd=\"local_zones\", data_list=domains_bulk)\nprint(o)\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Python console for unbound",
"version": "0.6.4",
"project_urls": {
"Homepage": "https://github.com/dmachard/unbound-console"
},
"split_keywords": [
"unbound",
"console",
"control",
"remote",
"client"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "681a38a57e15729df502e2a2da1b66445e2e916b88056e2e0f4c6832ca8552dc",
"md5": "86fbb65c2af43cf2acb6c330753e8657",
"sha256": "f32fe6a74293cfec3b5caa19ebdb2352b9d600e3124fc474b6e29390161ca161"
},
"downloads": -1,
"filename": "unbound_console-0.6.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "86fbb65c2af43cf2acb6c330753e8657",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 7812,
"upload_time": "2024-09-14T06:43:14",
"upload_time_iso_8601": "2024-09-14T06:43:14.857046Z",
"url": "https://files.pythonhosted.org/packages/68/1a/38a57e15729df502e2a2da1b66445e2e916b88056e2e0f4c6832ca8552dc/unbound_console-0.6.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5aef07735326409eb96ddedce2369462881ee943f149f5de81ff002a22471cbe",
"md5": "7b59cf1e60e40e5e768bfee743dd3ae0",
"sha256": "39992635a2d5a579f1de72cbc57b86d78f196449040dc336627afb244eaf13d8"
},
"downloads": -1,
"filename": "unbound_console-0.6.4.tar.gz",
"has_sig": false,
"md5_digest": "7b59cf1e60e40e5e768bfee743dd3ae0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7132,
"upload_time": "2024-09-14T06:43:16",
"upload_time_iso_8601": "2024-09-14T06:43:16.271759Z",
"url": "https://files.pythonhosted.org/packages/5a/ef/07735326409eb96ddedce2369462881ee943f149f5de81ff002a22471cbe/unbound_console-0.6.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-14 06:43:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dmachard",
"github_project": "unbound-console",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "unbound-console"
}