golang 获取本机真实IP

 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 }

 

转载于:https://www.cnblogs.com/chaselogs/p/11301940.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值