我想要使用Go获取客户端缓存DNS IP
看看我在下面尝试过的代码
import (
"fmt"
"net"
)
func main() {
// Usually DNS Server using 53 port number
// This case, TCP protocol is not considered
port := ":53"
protocol := "udp"
var buf [2048]byte
//Build the address
udpAddr, err := net.ResolveUDPAddr(protocol, port)
if err != nil {
fmt.Println("Wrong Address")
return
}
fmt.Println("Listened " + protocol + " from " + udpAddr.String())
//Create the connection
udpConn, err := net.ListenUDP(protocol, udpAddr)
if err != nil {
fmt.Println(err)
}
// Listening 53 Port Like DNS Server
for {
// If get request,
_, err := udpConn.Read(buf[0:])
if err != nil {
fmt.Println("Error Reading")
return
} else {
// Print Remote Address,
// I Guess this is the Client Cache DNS IP, but this is print <nil>
fmt.Println(udpConn.RemoteAddr())
}
}
}
在这种情况下,如何获得客户端缓存DNS IP?请帮我 我想建立客户端DNS IP收集器,好像哇
我也将此称为https://github.com/miekg/exdns/blob/master/reflect/reflect.go 但这不是我的答案
我想要简单的服务器
答案 0 :(得分:1)
UDP是无状态的。没有用于连接的单个客户端地址。每个数据包都可以从不同的地址发送,因此RemoteAddr
仅对客户端有用,对服务器不有用。
使用*UDPConn.ReadFrom
,*UDPConn.ReadFromUDP
或*UDPConn.ReadMsgUDP
之一代替Read
。它们全部返回读取数据包的客户端地址。