我已经尝试了我能想到的一切,但我正在碰壁。我想知道是否有人能够指出我正确的方向或可能发现问题?
由于几个原因,我正在尝试编写自己的 DNS 服务器,主要是学习经验。
有几件事要提一下:
我正在使用围棋
使用“gopacket”进行 DNS 数据包反序列化
服务器在使用 UDP 协议时按预期工作
因此,在通过 UDP 工作获得响应后,我决定是时候实施 TCP 了。下面是侦听 TCP 传入连接的代码片段。
// Listen TCP
c, err := t.Accept()
if err != nil {
log.Println(err)
}
go func(c net.Conn) {
tbuff := make([]byte, 4096)
_, err = c.Read(tbuff)
if err != nil {
fmt.Println(err)
}
clientAddr := addrt
packet := gopacket.NewPacket(tbuff, layers.LayerTypeDNS, gopacket.Default)
dnsPacket := packet.Layer(layers.LayerTypeDNS)
tcp, _ := dnsPacket.(*layers.DNS)
if !limiter(clientAddr.String()) {
c.Close()
}
tbuff = DNSHandle(tcp)
c.Write(tbuff)
c.Close()
}(c)
当我通过 TCP 发出 dig 命令时,服务器接受连接并将接收到的字节数据传递给 DNSHandle 函数(与 UDP 处理程序相同)。数据似乎与使用 UDP 时的数据有很大不同。
qq_笑_17
相关分类