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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM