首页 > 其他 > 详细

[转]golang 获取本机真实IP

时间:2021-07-23 11:03:38      阅读:23      评论:0      收藏:0      [点我收藏+]

 

原文:https://www.cnblogs.com/chaselogs/p/11301940.html

----------------

package main

import (
    "errors"
    "fmt"
    "net"
)

func externalIP() (net.IP, error) {
    ifaces, err := net.Interfaces()
    if err != nil {
        return nil, err
    }
    for _, iface := range ifaces {
        if iface.Flags&net.FlagUp == 0 {
            continue // interface down
        }
        if iface.Flags&net.FlagLoopback != 0 {
            continue // loopback interface
        }
        addrs, err := iface.Addrs()
        if err != nil {
            return nil, err
        }
        for _, addr := range addrs {
            ip := getIpFromAddr(addr)
            if ip == nil {
                continue
            }
            return ip, nil
        }
    }
    return nil, errors.New("connected to the network?")
}

func getIpFromAddr(addr net.Addr) net.IP {
    var ip net.IP
    switch v := addr.(type) {
    case *net.IPNet:
        ip = v.IP
    case *net.IPAddr:
        ip = v.IP
    }
    if ip == nil || ip.IsLoopback() {
        return nil
    }
    ip = ip.To4()
    if ip == nil {
        return nil // not an ipv4 address
    }

    return ip
}

func main() {
    ip, err := externalIP()
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(ip.String())
}

  

[转]golang 获取本机真实IP

原文:https://www.cnblogs.com/oxspirt/p/15047382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!