首页 > 其他 > 详细

golang 获取本机真实IP

时间:2019-08-05 12:09:49      阅读:702      评论:0      收藏:0      [点我收藏+]
 1 package main
 2 
 3 import (
 4     "errors"
 5     "fmt"
 6     "net"
 7 )
 8 
 9 func externalIP() (net.IP, error) {
10     ifaces, err := net.Interfaces()
11     if err != nil {
12         return nil, err
13     }
14     for _, iface := range ifaces {
15         if iface.Flags&net.FlagUp == 0 {
16             continue // interface down
17         }
18         if iface.Flags&net.FlagLoopback != 0 {
19             continue // loopback interface
20         }
21         addrs, err := iface.Addrs()
22         if err != nil {
23             return nil, err
24         }
25         for _, addr := range addrs {
26             ip := getIpFromAddr(addr)
27             if ip == nil {
28                 continue
29             }
30             return ip, nil
31         }
32     }
33     return nil, errors.New("connected to the network?")
34 }
35 
36 func getIpFromAddr(addr net.Addr) net.IP {
37     var ip net.IP
38     switch v := addr.(type) {
39     case *net.IPNet:
40         ip = v.IP
41     case *net.IPAddr:
42         ip = v.IP
43     }
44     if ip == nil || ip.IsLoopback() {
45         return nil
46     }
47     ip = ip.To4()
48     if ip == nil {
49         return nil // not an ipv4 address
50     }
51 
52     return ip
53 }
54 
55 func main() {
56     ip, err := externalIP()
57     if err != nil {
58         fmt.Println(err)
59     }
60 
61     fmt.Println(ip.String())
62 }

 

golang 获取本机真实IP

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

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