golang 获取本机IP

package main

import (
    "os/exec"
    "syscall"
    "regexp"
    "strings"
    "fmt"
    "golang.org/x/text/encoding/simplifiedchinese"
)

type Charset string

const (
    UTF8    = Charset("UTF-8")
    GB18030 = Charset("GB18030")
)
var strip string
func main(){
    ip()
}
func ip() string {

    if len(strip) <= 0{
        command := exec.Command("CMD", "/C", " ipconfig")
        command.SysProcAttr = &syscall.SysProcAttr{HideWindow:true}
        //stdout ,err:= command.Output()
        stdout, err := command.Output()
        if err != nil {
            fmt.Printf("utility : get ip error!")
        }

            cmdRe:=ConvertByte2String(stdout,"GB18030")
            parts:=strings.Split(cmdRe,"\r\n")
            total :=0
            num :=0
            var strip ,strgateway string
            for i,v := range parts{
                if strings.Contains(v, "IPv4 地址") {
                    reg := regexp.MustCompile(`\d+\.\d+\.\d+\.\d+`)
                    if len(reg.FindAllString(v, -1)) > 0{
                        strip =reg.FindAllString(v, -1)[0]
                        num = i
                        total = num + 2
                        
                    }
                }
                if strings.Contains(v, "默认网关") {
                    reg := regexp.MustCompile(`\d+\.\d+\.\d+\.\d+`)
                    if len(reg.FindAllString(v, -1)) > 0{
                        strgateway =reg.FindAllString(v, -1)[0]
                        fmt.Println("IPv4地址 is =",i,strip)
                        fmt.Println("默认网关 is =",i,total,strgateway) 
                    }
                }

            }
    }
    
    return strip
}

func ConvertByte2String(byte []byte, charset Charset) string {
    var str string
    switch charset {
    case GB18030:
        var decodeBytes,_=simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
        str= string(decodeBytes)
    case UTF8:
        fallthrough
    default:
        str = string(byte)
    }
    return str
}

====================================================================================================

package main

import (
	"fmt"
	"net"
	"os"
)
func main() {
 ip()
}
func ip() {

	    netInterfaces, err := net.Interfaces()
        if err != nil {
            fmt.Println("net.Interfaces failed, err:", err.Error())
            return ""
        }
     
        for i := 0; i < len(netInterfaces); i++ {
            if (netInterfaces[i].Flags & net.FlagUp) != 0 {
                if (netInterfaces[i].Name == "本地连接") || (netInterfaces[i].Name == "WLAN") || (netInterfaces[i].Name == "以太网"){
                    addrs, _ := netInterfaces[i].Addrs()
     
                    for _, address := range addrs {
                        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
                            if ipnet.IP.To4() != nil {
                                return  ipnet.IP.String()
                                
                            }
                        }
                    }
                }
            }
        }

    return ""

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值