golang编写的获取powerdns信息解析工具

powerdns是一个跨平台的开源DNS服务组件,PowerDNS的用户和客户包括领先的电信服务提供商,大型集成商,cloudfalre内容分发等网络公司。

包括:权威服务器Recursordnsdist全部都已经开源。

权威服务器:

PowerDNS权威服务器是一种通用的名称服务器,它支持大量后端。这些后端可以是纯区域文件,也可以是更具动态性的。

PowerDNS具有“后端”的概念。后端是服务器将查询的数据存储,其中包含DNS记录(和一些元数据)。

递归服务器:

PowerDNS Recurso是高性能的解析名称服务器,可为至少一亿个订户的DNS提供解析服务。

利用多个处理器并支持权威服务器相同的强大脚本编写功能,Recursor可以在保持最佳性能的同时保留现代DNS部署所需的灵活性。

dnsdist服务:

dnsdist是高度支持DNS、DoS和滥用负载平衡器。目标是将流量路由到最佳服务器,在分流或阻止滥用流量的同时,为合法用户提供最佳性能。

dnsdist是动态的配置语言是Lua,可以在运行时进行更改,可以从控制台或HTTP API查询其统计信息。

例如:dnsdist -l 127.0.0.1:5300 9.9.9.9 2620:fe::fe2620:fe::9

这将使dnsdist在IP地址127.0.0.1,端口5300上侦听并将所有查询转发负载均衡到两个IP地址。

powerdns信息查询

 我们可以使用此配置文件进行激活,这是我们通过解决开发团队的第一个请求API服务来满足PDNS的“要求”的时候。 此功能使我们能够发送请求,以简单,干净地创建,修改或删除DNS服务器中的记录。

启用API之后方可调用API,启用方式和API说明地址Built-in Webserver and HTTP API — PowerDNS Recursor documentation

区域API,区域对象代表权威的DNS区域。资源记录集(以下称为rrset)是给定名称和类型的所有记录。

Zone表示PowerDNS服务器中的已配置区域。获取所有已配置的区域,然后遍历区域列表中的区域id,进而获取每个区的dns解析信息。代码如下:

package main

import (
	//"bytes"
	"encoding/json"
	"crypto/tls"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {

	tr := &http.Transport{
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}
	client := &http.Client{Transport: tr}
	url := "https://powerdns.it.oa.com/api/v1/servers/localhost/zones"
	reqest, err := http.NewRequest("GET", url, nil)

	//增加header选项
	reqest.Header.Add("X-API-Key", "YlRyWDExxxxxxxxx")
	reqest.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)")

	if err != nil {
		panic(err)
	}
	response, err := client.Do(reqest)
	if err != nil {
		fmt.Println(err)
	}
	defer response.Body.Close()
	body, err2 := ioutil.ReadAll(response.Body)
	if err2 != nil {
		fmt.Println(err2)
	}

	var res_json []map[string]interface{}
	json.Unmarshal(body, &res_json)
	for _, v := range res_json {
          client := &http.Client{Transport: tr}
          url := "https://powerdns.it.oa.com/api/v1/servers/localhost/zones/" + v["id"].(string)
          reqest, err := http.NewRequest("GET", url, nil)

          //增加header选项
          reqest.Header.Add("X-API-Key", "YlRyWDExxxxxxxxxxx") //管理员权限申请的key
          reqest.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)")

          if err != nil {
                panic(err)
          }
          response, err := client.Do(reqest)
          if err != nil {
                fmt.Println(err)
          }
          defer response.Body.Close()
          body, err2 := ioutil.ReadAll(response.Body)
          if err2 != nil {
                fmt.Println(err2)
          }

	      var tmp_json map[string]interface{}
          json.Unmarshal(body, &tmp_json)
	      vv := tmp_json["rrsets"].([]interface{})

          for _, v := range vv {
	          row := v.(map[string]interface{})
	          for _, v := range row["records"].([]interface{}) {
                  res := v.(map[string]interface{})
    	          fmt.Println(res["name"], res["type"], res["content"])
	          }
	      }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值