使用go语言实现的dns请求程序

2020-07-13 01:23:44

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])
}


文章来源:沃航科技

联系我们
地址:武汉市东湖高新开发区光谷总部国际1栋2412室
QQ: 932773931
电话:027-59761089-806
手机:13397158231
邮箱:jevian_ma@worldflying.cn

沃航(武汉)科技股份有限公司版权所有

备案号:鄂ICP备16014230号-1

932773931
13397158231