【问题标题】:Parsing DNS text files with python用python解析DNS文本文件
【发布时间】:2012-09-16 21:43:42
【问题描述】:

我是 Python 的绝对新手,一个小时前才将它安装在我的电脑上。

我开始在一个拆分项目中拆分一个相当复杂的 DNS 系统,并且主要需要解析大约 20 多个 BIND 服务器上的各种 named.conf 和区域文件。

对于初学者,我需要确定不同服务器认为自己是哪些 DNS 区域的主人。

我最初的想法是使用 Python 读取 named.conf 文本文件,搜索“type master;”并在文本文件或其他文件中输出区域的名称。

named.conf 示例的摘录:

zone "92.34.163.in-addr.arpa" in { 
type master; 
file "92.34.163.in-addr.arpa.db"; 
        update-policy {
        grant _nbc_update_channel_key_only_ wildcard * ANY;        };}; 

zone "aam.hal.hydro.com" in { 
type master;   
file "aam.hal.hydro.com.db"; 
        update-policy {
        grant _nbc_update_channel_key_only_ wildcard * ANY;        };}; 

文本文件中的期望输出是:

master 10.10.10.in-addr.arpa    
master kodal.no
master smula.no

任何提示将不胜感激!

【问题讨论】:

  • 我认为如果你先尝试为此编写一些伪代码,那么你将能够很容易地用 python 解决这个问题。
  • 我建议你先阅读 complete Python 教程,它会自动回答你的大部分问题 :)

标签: python parsing dns


【解决方案1】:

您可以使用bicop 来解析此类文件:

from bicop import parse
parse(open("/etc/bind/named.conf"))

【讨论】:

  • 我认为 bicop 不能正常用于如下配置: zone "example.com" IN { type master; };它抱怨缺少所需的分隔符。
【解决方案2】:

在您的位置上,我可能会使用解析器生成器(例如 PLY)来编写解析器,以从各种 DNS 配置文件中提取所需的信息。

【讨论】: