我有一个从BIND导出的文件,其中包含大约500个域名的TSIG值。我需要将数据重新用于JSON以进行REST API查询。 BIND数据的格式如下:
// secondary-example.com.
key "2000000000000.key." {
algorithm hmac-md5;
secret "ahashedvalue=";
};
zone "secondary-example.com." {
type slave;
file "sec/secondary-example.com.";
allow-transfer { 1.1.1.1;
1.1.2.2;
};
also-notify { 1.1.1.1;
2.2.2.2;
};
masters {
1.2.3.4 key 2000000000000.key.;
};
};
由此我需要提取密钥,区域和秘密。这是一个示例API请求。
{
"properties":{
"name":"secondary-example.com.",
"accountName":"example",
"type":"SECONDARY"
},
"secondaryCreateInfo":{
"primaryNameServers":{
"nameServerIpList":{
"nameServerIp1":{
"ip":"1.2.3.4",
"tsigKey":"2000000000000.key.",
"tsigKeyValue":"ahashedvalue="
}
}
}
}
}
我在制作适合该场景的正则表达式时遇到了困难。我正在寻找在python脚本中构造JSON并通过Postman发送请求。
答案 0 :(得分:0)
我花了几天时间阅读正则表达式并找到了解决方案。所以,每个“区域”都以评论开头......例如“secondary-example.com”......每组BIND信息都是17行。这个解决方案是hackey,并始终假设数据是正确的,但它设法工作。
将区域分隔成文本块。
zones = []
cur_zone = ''
f = open(bind_file).readlines()
for line in f:
if line[0:2] == '//':
zones.append(cur_zone)
cur_zone = ''
else:
cur_zone = cur_zone + line
zones.pop(0) # Drop the first list item, it's empty
迭代这些块并匹配所需的参数。
for z in zones:
z_lines = z.splitlines()
# Regex patterns to make the required parameters
key = re.findall('\"(.*)\"', z_lines[0])[0]
secret = re.findall('\"(.*)\"', z_lines[2])[0]
name = re.findall('\"(.*)\"', z_lines[5])[0]
master = re.findall('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', z_lines[15])[0]