DHCP配置文件分析器

pydhcpdparser的Python项目详细描述


pydhcpdparser是一个纯基于python的dhcpd配置解析器。 使用ply构建,lex和yacc解析工具,可以使用pydhcpdparser 要验证dhcpd配置的语法,请从 配置文件并作为python变量访问它们。

示例

如果将dhcpd配置输入到pydhcpdparser,则为

subnet 10.198.146.0 netmask 255.255.255.192 {
    pool {
         failover peer "az-dhcp-failover";
         range 10.198.146.4 10.198.146.62;
    }
    option routers 10.198.146.1;
    option broadcast-address 10.198.146.63;
    option domain-name "some.domain.net";
    option domain-name-servers 10.24.199.136,10.24.199.137;
}

pydhcpdparser验证dhcpd语法,解析并返回 pythonic结果为

[{'netmask': '255.255.255.192',
 'option': {'broadcast-address': '10.198.146.63',
            'domain-name': '"some.domain.net"',
            'domain-name-servers': '10.24.199.136,10.24.199.137',
            'routers': '10.198.146.1'},
 'pool': {'failover': ('peer', '"az-dhcp-failover"'),
          'range': ('10.198.146.4', '10.198.146.62')},
 'subnet': '10.198.146.0'}]

用法

importpydhcpdparserconf="""
subnet 10.198.146.0 netmask 255.255.255.192 {
    pool {
         failover peer "az-dhcp-failover";
         range 10.198.146.4 10.198.146.62;
    }
    option routers 10.198.146.1;
    option broadcast-address 10.198.146.63;
    option domain-name "some.domain.net";
    option domain-name-servers 10.24.199.136,10.24.199.137;
}
"""print(pydhcpdparser.parser.parse(conf))

frompydhcpdparserimportparserconf="zone 17.127.10.in-addr.arpa. { key DHCPUPDATE; }"print(parser.parse(conf))

frompydhcpdparserimport*withopen("/etc/dhcp/dhcpd.conf")asf:conf=f.read()print(parser.parse(conf))

正在安装pydhcpdparser

$ pip install pydhcpdparser

开发安装pydhcpdparser

$ pip install pydhcpdparser -r test-requirements.txt

支持的配置分析器

  1. 子网语句

    subnet subnet-number netmask netmask {
      [ parameters ]
      [ declarations ]
    }
    
  2. 池声明

  3. 范围语句

    range [ dynamic-bootp ] low-address [ high-address];
    
  4. 选项语句

    option name value1[, value2...];
    
  5. 区域声明

  6. 关键声明

    key name {
        algorithm algo;
        secret value;
    };
    
  7. 包含语句

    include "filename";
    
  8. 允许和拒绝池声明中的声明

    known-clients;
    unknown-clients;
    dynamic bootp clients;
    authenticated clients;
    unauthenticated clients;
    all clients;
    after time;
    members of "class";
    
  9. 允许、拒绝和忽略全局范围内的声明

    unknown-clients
    bootp
    duplicates
    client-updates
    leasequery
    booting
    declines
    
  10. 全局参数声明语句

adandon-lease-time time;
adaptive-lease-time-threshold percentage;
always-broadcast flag;
always-reply-rfc1048 flag;
authoritative;
not authoritative;
boot-unknown-clients flag;
db-time-format [ default | local ] ;
ddns-domainname name;
ddns-rev-domainname name;
ddns-update-style style;
ddns-updates flag;
default-lease-time time;
delayed-ack count;
max-ack-delay microseconds;
do-forward-updates flag;
dynamic-bootp-lease-cutoff date;
dynamic-bootp-lease-length length;
filename "filename";
get-lease-hostnames flag;
infinite-is-reserved flag;
lease-file-name name;
limit-addrs-per-ia number;
dhcpv6-lease-file-name name;
local-port port;
local-address address;
log-facility facility;
max-lease-time time;
min-lease-time time;
min-secs seconds;
next-server server-name;
omapi-port port;
one-lease-per-client flag;
pid-file-name name;
dhcpv6-pid-file-name name;
ping-check flag;
ping-timeout seconds;
preferred-lifetime seconds;
remote-port port;
server-identifier hostname;
server-duid LLT [ hardware-type timestamp hardware-address ] ;
server-duid EN enterprise-number enterprise-identifier ;
server-duid LL [ hardware-type hardware-address ] ;
server-name name ;
dhcpv6-set-tee-times flag;
site-option-space name ;
stash-agent-options flag;
update-conflict-detection flag;
update-optimization flag;
update-static-leases flag;
use-host-decl-names flag;
use-lease-addr-for-default-route flag;
vendor-option-space string;
  1. 主机块声明语句
always-reply-rfc1048 flag;
ddns-hostname name;
ddns-domainname name;
fixed-address address [, address ... ];
fixed-address6 ip6-address ;
fixed-prefix6 low-address / bits;
hardware hardware-type hardware-address;

单元测试

$ python -m unittest discover
$ python3 -m uninttest

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Admob不使用webview   Java Wicket表单:序列化对象类“myClassName”时出错   java googledriveapi更新文件与我的帐户管理员   java简单框架未知xml标记解析   java如何使用主类和用户获取Spark应用程序ID   java如何更改自定义属性的值?   java有没有办法在jMock中找到未使用的期望值?   gradle运行任务的java文档?   java通过使用数组来存储文本文件的行,通过覆盖来删除文本文件中的行   用于表达式语言注入的java利用负载   java IDEStyle程序运行   java在运行时启用/禁用Springws   爪哇芦苇。formatNumber NullPointException   java为什么我的代码无法检测两个动态实体之间的碰撞?