Go语言的不归路

Go语言获取ip

2021-01-19  本文已影响0人  吴佳浩

获取本地内网ip

import (
    "net"
)

// LocalIPs return all non-loopback IPv4 addresses
func LocalIPv4s() ([]string, error) {
    var ips []string
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        return ips, err
    }

    for _, a := range addrs {
        if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil {
            ips = append(ips, ipnet.IP.String())
        }
    }

    return ips, nil
}

// GetIPv4ByInterface return IPv4 address from a specific interface IPv4 addresses
func GetIPv4ByInterface(name string) ([]string, error) {
    var ips []string

    iface, err := net.InterfaceByName(name)
    if err != nil {
        return nil, err
    }

    addrs, err := iface.Addrs()
    if err != nil {
        return nil, err
    }

    for _, a := range addrs {
        if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil {
            ips = append(ips, ipnet.IP.String())
        }
    }

    return ips, nil
}

获取本机外网ip

package main
import (
    "net"
    "fmt"
    "strings"
)
func main() {
    conn, err := net.Dial("udp", "google.com:80")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    defer conn.Close()
    fmt.Println(strings.Split(conn.LocalAddr().String(), ":")[0])
}
上一篇 下一篇

猜你喜欢

热点阅读