Skip to main content

ezDnsShim

Project description

ezDnsShim v1.0.0

ezDnsShim é uma biblioteca em Python3 para trabalhar com o servidor de DNS desenvolvido e utilizado pelo Registro.br para gerenciar os domínios da internet brasileira. Retorna a resposta em JSON ao invés de XML, tudo consolidado em um único arquivo python com códígo fonte comentado e sem dependências de outras bibliotecas, pure python! For an English version, click here

O DnsShim é um servidor de DNS de código aberto, desenvolvido em Java pelo Registro.br e pode ser utillizado por qualquer empresa ou provedor de serviços de internet. Consiste em um servidor de DNS autoritativo MASTER que fica isolado, sem possibilidade de acesso externo. A gerência das zonas de DNS são feitas somente nesse servidor DnsShim, ele faz as publicações nos servidores de DNS autoritativos secundários que ficam disponíveis ao público e respondendo com autoridade sobre as zona de DNS ali cadastradas. Esses servidores autoritativos secundários utilizam o bind e ficam recebendo as atualizações do MASTER sempre que houver uma nova publicação.

O protocolo de comunicação com esse servidor é baseado em XML. A bibliteca ezDnsShim retorna uma variável do tipo dict (como um json) que facilita muito a gerência desse serviço. Há tratamentos de exceptions com mensagens de erro claras e disponíveis em Português e Inglês.

O código foi baseado na biblioteca pydnsshim v1.5, também desenvolvida pelo Registro.br e disponível para download em https://www.registro.br/dnsshim

How Easy?

from ezdnsshim import ezDnsShimClient

user_to_add = 'dnsadmin'

conn = ezDnsShimClient(server='127.0.0.1',port=9999)
response = conn.addUser(username=user_to_add,password='*********')
if response['status'] == responseCode.OK:
    print(f"Username {user_to_add} created with success!")
else:
    print(f"Failed to add the username {user_to_add} - Reason: {response['msg']} - Status Code: {response['status']}")
    sys.exit(1)
    
with ezDnsShimClient(server='127.0.0.1',port=9999,username='dnsadmin',password='*********',debug=False,keep_alive=True) as conn:
    if conn.isAuthenticated: 
        print(f"LOGGED IN! SessionID {conn.sessionId}")
        zone_to_add = 'mynewdnszone1.com.br'
        if not conn.zoneExists(zone=zone_to_add):
            response = conn.newZone(zone=zone_to_add,slaveGroup='slavegroup-sa-east')
            if response['status'] == responseCode.OK:
                print(f"Your new zone '{zone_to_add}' was created with success! [{response['elapsedTime]}'s]")
                print(json.dumps(response,indent=4,sort_keys=False))
        else:
            print(f"The zone {zone_to_add} already exists on this server!")

Output:

LOGGED IN! SessionID 1527298117
Your new zone 'mynewdnszone1.com.br' was created with success! [0.18062's]
{
    "status": 1,
    "newZone": {
        "zone": "mynewdnszone1.com.br",
        "slaves": {
            "slave": [
                {
                    "slaveAddress": "10.10.10.61",
                    "slavePort": "53"
                },
                {
                    "slaveAddress": "10.10.10.71",
                    "slavePort": "53"
                }
            ]
        },
        "key": "20240122002100-ZSK-257-61062",
        "keytag": "61062",
        "digestType": "SHA256",
        "digest": "2f90743ef64d8f30544b58f1ae124cab1bf95660304897bb52b0e01e97a658f1"
    },
    "elapsedTime": 0.18062
}

Fase final de testes

Está sendo realizado os últimos testes e estamos implementado algumas validações e blindagens contra erros de input do usuário. A biblioteca estará disponivel até o final de Jan/2024.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ezDnsShim-0.9.0.tar.gz (4.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page