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 }
  • 相关阅读:
    第二周作业
    第一次作业
    第0次作业
    第一次的作业
    第0次作业
    第三次作业
    %f使用时的注意事项
    关于c++停止工作
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/chaselogs/p/11301940.html
Copyright © 2011-2022 走看看