dns协议api

Catalogue
  1. 1. @NewEndpoint(domain)
  2. 2. @Resolve()
  3. 3. @ir 响应结构体
  4. 4. 执行demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
"fmt"
"github.com/brewlin/net-protocol/protocol/application/dns"
"github.com/brewlin/net-protocol/protocol/header"
)

func main() {
d := dns.NewEndpoint("www.baidu.com")
fmt.Println("DNS lookuphost : www.baidu.com")
defer d.Close()

ir,err := d.Resolve();
if err != nil {
fmt.Println(err)
return
}
for _,v := range *ir {
switch v.Type {
case header.A:
fmt.Println("A(host name) :",v.Address)
case header.CNAME:
fmt.Println("CNAME (alias name):",v.Address)
}
}


}

@NewEndpoint(domain)

新建一个dns客户端,主要负责udp客户端初始化,以及一些主要工作

@Resolve()

负责发送dns数据包请求,以及解析响应数据

@ir 响应结构体

改结构是一个数组指针,复用数据

1
2
3
4
5
6
7
8
9
10
//DNSResource ansower,authority,additional
type DNSResource struct {
Name uint16
Type DNSResourceType
Class uint16
TTL uint32
RDlen uint16
RData []byte
Address string
}

在接收到的数据,包含多条记录,只有A类型是ip地址,所以需要过滤一下

1
2
3
4
5
6
7
8
for _,v := range *ir {
switch v.Type {
case header.A:
fmt.Println("A(host name) :",v.Address)
case header.CNAME:
fmt.Println("CNAME (alias name):",v.Address)
}
}

执行demo

image