Любые библиотеки Python для анализа файлов зоны Bind? - PullRequest
6 голосов
/ 25 октября 2008

Какие-нибудь библиотеки Python для анализа файлов зон Bind? В основном то, что поможет в добавлении / удалении зон и записей. Это должно работать, даже если кто-то изменяет файл зоны вручную, поэтому перезапись файлов зон каждый раз не является решением.

Ответы [ 5 ]

6 голосов
/ 04 ноября 2011

easyzone - хороший слой поверх dnspython

Zoner предоставляет веб-интерфейс для редактирования файлов зон и использует easyzone.

5 голосов
/ 27 января 2010

Мне не удалось использовать bicop для файлов классической зоны, таких как:

    $TTL 86400
@   IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
    2006040800   ; serial
    14400        ; refresh
    1800         ; retry
    604800       ; expire
    86400 )      ; minimum

@

                    IN NS      ns1.first-ns.de.

Я посмотрю на dnspython

1 голос
/ 15 июля 2011

Я знаю, что это старый, но единственный рабочий, который я смог найти, называется iscpy. Вы можете сделать easy_install.

easy_install iscpy

Тогда в python:

import iscpy
iscpy.ParseISCString(open('somefile.conf', 'r').read())

Возвращает словарь.

0 голосов
/ 28 октября 2008

Вы можете попробовать bicop, «библиотеку python для обработки файлов конфигурации в стиле связывания ISC».

0 голосов
/ 26 октября 2008

См. Ответ выше о бикопе.

Кроме того, индекс пакетов Python на http://pypi.python.org/pypi - отличное место для поиска пакетов Python.

РЕДАКТИРОВАТЬ : приведенное ниже может все же помочь кому-то, пытающемуся разобраться в простом разборе, но bicop, очевидно, является существующим решением.

Если кто-то изменил конфигурацию вручную, и вы не хотите перезаписывать ее, означает ли это, что вы хотите вставить / удалить строки из существующей конфигурации, оставив все комментарии и т. Д. Без изменений? Это предотвращает синтаксический анализ и повторный вывод конфигурации, но это также является положительным моментом - вам не нужно полностью анализировать файл для достижения вашей цели.

Чтобы добавить запись, вы можете попробовать простой подход, такой как

# define zone_you_care_about and line_you_wish_to_insert first, then:
for line in bindfile.read():
    out.write(line + '\n')
    if ('zone "%s" in' % zone_you_care_about) in line:
        out.write(line_you_wish_to_insert)

Аналогичный код работает для удаления строки:

# define zone_you_care_about and relevant_text_to_remove, then:
for line in bindfile.read():
    if not relevant_text_to_remove in line:
        out.write(line + '\n')

Вы можете зайти так далеко, как вам нужно, с помощью простых фрагментов кода, подобных этому.

...