如何检查golang中是否打开了特定的UDP端口?
到目前为止,我尝试了许多方法,但没有人起作用。
准确地说,不管我输入的端口是什么,只要告诉服务器是否响应即可。
方法一
func methodOne(ip string, ports []string) map[string]string {
// check emqx 1883, 8083 port
results := make(map[string]string)
for _, port := range ports {
address := net.JoinHostPort(ip, port)
// 3 second timeout
conn, err := net.DialTimeout("udp", address, 3*time.Second)
if err != nil {
results[port] = "failed"
// todo log handler
} else {
if conn != nil {
results[port] = "success"
_ = conn.Close()
} else {
results[port] = "failed"
}
}
}
return results
}
方法二
func ping(host string, port string) error {
address := net.JoinHostPort(host, port)
conn, err := net.DialTimeout("udp", address, 1*time.Second)
if conn != nil {
fmt.Println(conn.LocalAddr())
defer conn.Close()
}
return err
}
方法三从这个软件包:https://github.com/janosgyerik/portping
portping -c 3 -net udp 0.0.0.0.0 80
最佳答案
除非您确定服务器肯定会发回一些东西,否则您无法 try catch 响应。
检查此链接https://ops.tips/blog/udp-client-and-server-in-go/
关于go - golang检查udp端口打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62608339/