dns作为互联网应用常用的协议,由于需要等待对方服务器的返回,因此往往会成为高并发程序的性能瓶颈所在。go语言作为一切皆异步的编程语言,具有其独特的性能优势,下面我通过go语言写一个dns请求以及获得ip的服务程序,方便日后写其他关于dns请求的程序。
/*
资料来源
http://c.biancheng.net/view/6457.html
https://wenku.baidu.com/view/94004323dcccda38376baf1ffc4ffe473368fd36.html
https://wenku.baidu.com/view/5d417595b8d528ea81c758f5f61fb7360b4c2b4d.html
*/
package main
import (
"fmt"
"net"
)
func main () {
conn, err := net.Dial("udp", "192.168.20.1:53");
if err != nil {
fmt.Println("net.Dial err:", err)
return
}
defer conn.Close()
conn.Write([]byte{0x07, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 'w', 'w', 'w', 0x0b, 'w', 'o', 'r', 'l', 'd', 'f', 'l', 'y', 'i', 'n', 'g', 0x02, 'c', 'n',
0x00, 0x00, 0x01, 0x00, 0x01})
var b [512]byte
n, err := conn.Read(b[:])
if err != nil {
fmt.Println(err)
return
}
fmt.Println("回答数量: ", 256 * uint16(b[6]) + uint16(b[7]))
fmt.Println("ip为: ", b[n-4], b[n-3], b[n-2], b[n-1])
}文章来源:沃航科技