package main import ( "fmt" "io/ioutil" "os/exec" "strings" ) func GetCommandLinuxCon(commandLinux string) []byte { //需要执行命令: commandLinux cmd := exec.Command("/bin/bash", "-c", commandLinux) // 获取输入 output, err := cmd.StdoutPipe() if err != nil { fmt.Println("无法获取命令的标准输出管道", err.Error()) return nil } // 执行Linux命令 if err := cmd.Start(); err != nil { fmt.Println("Linux命令执行失败,请检查命令输入是否有误", err.Error()) return nil } // 读取输出 bytes, err := ioutil.ReadAll(output) if err != nil { fmt.Println("打印异常,请检查") return nil } if err := cmd.Wait(); err != nil { fmt.Println("Wait", err.Error()) return nil } return bytes } type NetworkConfigGet struct { Name string `json:"name"` Ip string `json:"ip"` Gateway string `json:"gateway"` Netmask string `json:"netmask"` } func main(){ network := GetCommandLinuxCon("ifconfig") gateway := GetCommandLinuxCon("route -n") linesNetwork := strings.Split(string(network), "\n") linesGateway := strings.Split(string(gateway), "\n") var Net []NetworkConfigGet //for i := range lines_network { for i:=0;i<len(linesNetwork)-1;i++{ flag := 0 if strings.HasPrefix(linesNetwork[i], " ") { flag =1 }else if strings.HasPrefix(linesNetwork[i], "lo:"){ flag =1 }else if strings.HasPrefix(linesNetwork[i], "virbr"){ flag =1 } if flag==0 && len(linesNetwork[i+1]) >= 75 { index1 := strings.IndexByte(linesNetwork[i], ':') if index1 > 0 { name := linesNetwork[i][:index1] index2 := strings.Index(linesNetwork[i+1], "inet") index3 := strings.Index(linesNetwork[i+1], "netmask") index4 := strings.Index(linesNetwork[i+1], "broadcast") ip := linesNetwork[i+1][index2+4 : index3] netmask := linesNetwork[i+1][index3+7 : index4] ip = strings.TrimSpace(ip) netmask = strings.TrimSpace(netmask) var NetTemp NetworkConfigGet NetTemp.Name = name NetTemp.Ip = ip NetTemp.Netmask = netmask Net = append(Net, NetTemp) } } } for i:=0;i<len(linesGateway);i++ { for j :=0;j<len(Net);j++{ if bl := strings.HasSuffix(linesGateway[i], Net[j].Name) ; bl && linesGateway[i][16] != '0' { Net[j].Gateway=linesGateway[i][16:32] Net[j].Gateway=strings.TrimSpace(Net[j].Gateway) } } } for i := range Net{ fmt.Printf("第%d个网卡的名称:%s\n",i+1,Net[i].Name) fmt.Printf("网卡%d的地址:%s\n", i+1,Net[i].Ip) fmt.Printf("网卡%d的掩码:%s\n",i+1,Net[i].Netmask) fmt.Printf("网卡%d的网关:%s\n",i+1,Net[i].Gateway) } }