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
支持的配置分析器
子网语句
subnet subnet-number netmask netmask { [ parameters ] [ declarations ] }
池声明
范围语句
range [ dynamic-bootp ] low-address [ high-address];
选项语句
option name value1[, value2...];
区域声明
关键声明
key name { algorithm algo; secret value; };
包含语句
include "filename";
允许和拒绝池声明中的声明
known-clients; unknown-clients; dynamic bootp clients; authenticated clients; unauthenticated clients; all clients; after time; members of "class";
允许、拒绝和忽略全局范围内的声明
unknown-clients bootp duplicates client-updates leasequery booting declines
全局参数声明语句
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;
- 主机块声明语句
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