zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    svn忽略不需要同步的文件夹或文件
    Redis 字符串(String)
    Redis 数据类型
    Linux下安装rabbitMQ
    Windows平台下Git服务器搭建
    Linux下安装redis
    JVM调优总结
    Tomcat优化配置
    通过profile 用maven命令打不同配置的变量包
    Log4j日志配置说明
  • 原文地址:https://www.cnblogs.com/chaselogs/p/11301940.html
Copyright © 2011-2022 走看看