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)
}
}
Go语言执行Linux指令获取输出内容,以及分析获取主机的网络信息,网卡、网关、子网掩码以及IP地址
最新推荐文章于 2024-05-13 17:29:20 发布