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]) }
文章来源:沃航科技