为了账号安全,请及时绑定邮箱和手机立即绑定

golang 检查 udp 端口​​是否打开

golang 检查 udp 端口​​是否打开

Go
心有法竹 2022-06-13 15:46:27
如何检查特定的 UDP 端口是否在 golang 中打开?到目前为止,我已经尝试了很多方法,但没有一个奏效。准确地说,所有这些,只要告诉服务器是否响应,无论我输入什么端口。方法一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/portpingportping -c 3 -net udp 0.0.0.0.0 80
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

你不能,除非你确定服务器会发回一些东西,然后你可以尝试捕捉响应。

检查此链接https://ops.tips/blog/udp-client-and-server-in-go/


查看完整回答
反对 回复 2022-06-13
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

由于 UDP 不提供类似“连接”的任何东西,在我看来,检查远程 UDP 服务器是否正在运行的唯一方法是发送有意义的消息,服务器可以理解该消息并且需要对此进行“响应”。然后我们只需要等待服务器回复,如果有回复 - 服务器就可以了。

同样,对于 UDP,我们必须进行多次发送,因为如果服务器关闭,它将不会收到数据包。

遵循所有这些逻辑,我实现了支持 UDP 和 TCP 库并按照上述方式工作的 GO 库/cli 实用程序。


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 610 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号