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 ""
}