首页 > 解决方案 > 如何检查我是否可以绑定到 IP 地址?

问题描述

我有一个 IP 地址,想检查是否可以从它向 Internet 发送请求。我想检查 IPv4 地址和 IPv6 地址。

该检查应适用于任何 IP 地址(本地、公共、docker's、lo 等)。

换个角度,想看看能不能绑定地址。例如,我在我的机器上设置了无法绑定的 IP(通过测试curl --interface),并希望从我的可用地址中过滤这些 IP。

用法:用户输入一个 IP 地址来发送(http get)请求,我想检查 IP 是否有效/可用。

编辑尝试绑定并查看是否可以:我已经尝试过:

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.

标签: go

解决方案


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

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

推荐阅读