gpt4 book ai didi

go - 如何检查我是否可以绑定(bind)到 IP 地址?

转载 作者:行者123 更新时间:2023-12-01 21:09:19 27 4
gpt4 key购买 nike

我有一个 IP 地址,想检查是否可以从它向 Internet 发送请求。
我想检查 IPv4 地址和 IPv6 地址。
该检查应适用于任何 IP 地址(本地、公共(public)、docker's、lo 等)。
换个角度,想看看能不能绑定(bind)地址。例如,我在我的机器上设置了无法绑定(bind)的 IP(通过 curl --interface 测试),并希望从我的可用地址中过滤这些 IP。
用法:用户输入一个 IP 地址来发送(http get)请求,我想检查 IP 是否有效/可用。
编辑尝试绑定(bind)并查看是否可以:
我试过这个:

tcpAddr, _ := net.ResolveTCPAddr("tcp", ipString)
client := &http.Client{
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 10 * time.Second,
LocalAddr: tcpAddr,
}).DialContext,
},
}

_, err = client.Get("http://www.google.com/")
if err != nil {
fmt.Println("Unusable")
} else {
fmt.Println("Usable")
}
它将所有可用地址(甚至环回)显示为可用(甚至检查响应主体;所有都是有效的)。其中许多无法通过 curl --interface 绑定(bind)。 .

最佳答案

尝试绑定(bind)它,看看是否有错误:

l,err := net.Listen("tcp", address)
if err != nil {
// address is not bindable
} else {
l.Close()
}

关于go - 如何检查我是否可以绑定(bind)到 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64070090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com