我最近在 python 中编写了一个脚本,它处理 Microsoft Windows DHCP 服务器转储文件并使用电子表格 XML 格式生成当前保留的 XML 文件。
该脚本基本上使用 python open()命令打开一个文件,然后遍历每一行(对于文件中的行)并查找关键字reservedip。如果找到关键字,则使用 shlex split()命令将该行分成多个字段。
但是,当我使用 microsoft DHCP 服务器的默认转储文件运行此脚本时,我没有得到任何结果。另请注意,我无法使用 Linux 的 grep 命令在文件中进行搜索
然后我尝试在 gedit 中打开文件并将其保存为 unix 文本文件。完成此操作后,我得到了结果并能够在文件中进行 grep。然而,这种方法破坏了编写脚本来自动化我的工作的全部意义。
我一直在谷歌上搜索,但没有找到我想要的东西。我也尝试以二进制模式打开文件,但这也无济于事。
我希望有人可以帮助我解决这个问题。
根据请求,以下是脚本的作用(至少是循环部分)和 DHCP 服务器输出的示例:
脚本
# Setup an empty dictionary to store the extracted records
records = {}
# Open dhcp dump file
f = open(dhcp.txt, "r")
# Iterate file line by line
for line in f:
# Only use line with the word "reservedip" in it
if "reservedip" in line:
# Split line into fields by spaces (excluding quoted substrings)
field = shlex.split(line)
# Add new entry for each record using the 32bit IP address int as it's key
records[addr_to_int(field[7])] = [field[7], field[8], field[9], field[10]]
*注意:addr_to_int 是我编写的将点分 IPv4 地址转换为整数的函数*
DHCP 转储
不幸的是,由于公司政策,我无法包含真正的 DHCP 服务器转储。但是我试图从文件中删除的行如下所示:
Dhcp Server \\servername.company.local Scope 172.16.104.0 添加reservedip 172.16.104.207 003386dd00gg "hostname.company.local" "Host Description" "BOTH"
在此先感谢,帕斯卡