如何使用 Go 获取客户端 DNS IP
学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《如何使用 Go 获取客户端 DNS IP》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!
问题内容我想使用 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 收集器,看起来 whoami
我也将此称为 https://github.com/miekg/exdns/blob/master/reflect/reflect.go 但这不是我的答案
我想要简单的服务器
解决方案
UDP 是无状态的。连接没有单一的客户端地址。每个数据包可以从不同的地址发送,因此RemoteAddr
仅在客户端有用,而在服务器上无用。
使用 *UDPConn.ReadFrom
、*UDPConn.ReadFromUDP
或 *UDPConn.ReadMsgUDP
之一代替 Read
。它们都返回读取数据包的客户端地址。
以上就是《如何使用 Go 获取客户端 DNS IP》的详细内容,更多关于的资料请关注编程网公众号!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341