介绍
这篇文章给大家介绍利用golang怎么对网卡信息进行获取,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
package 主要 import ( “fmt" “os/exec" “strings" “;github.com/safchain/ethtool" ) func main (), { baseNicPath :=,“/sys/类/net/" cmd :=, exec.Command (“ls",, baseNicPath) 但,,err :=, cmd.Output () if err  !=, nil {//fmt.Println(“错误:“,,呃) 返回 } output :=,字符串(buf) for _, device :=, range strings.Split(输出,“\ n"), { if len(设备),祝辞,1,{ fmt.Println(设备) ethHandle, err :=, ethtool.NewEthtool () if err  !=, nil { 恐慌(err.Error ()) } defer ethHandle.Close () 统计,err :=, ethHandle.LinkState(设备) if err  !=, nil { 恐慌(err.Error ()) } fmt.Printf(“链接名:% s LinkState:, % d \ n",,设备,统计数据) } } } ,复制;
<强>补充:去语言取得以太网类型的网卡地址强>
在c#中取得以太网类型的网卡地址
在c#中,因为有NetworkInterface .NetworkInterfaceType==NetworkInterfaceType。以太网所以,很容易在代码中进行判断。
public static PhysicalAddress GetMacAddress () { foreach 才能;(NetworkInterface nic  NetworkInterface.GetAllNetworkInterfaces拷贝()) {才能 ,,,//,Only consider Ethernet network 接口 ,,,if (nic.NetworkInterfaceType ==, NetworkInterfaceType.Ethernet),//, nic.OperationalStatus ==OperationalStatus.Up ,,,{ ,,,,,return nic.GetPhysicalAddress (); ,,,} ,,} return 才能;零; }
在中去的处理办法
搜索百度百十回,没有找到答案,无奈,搜索网包的源码,找到蛛丝马迹,在未公开的方法中,找到一个类型的判断语句.net/interface_windows。中,有窗户。IF_TYPE_ETHERNET_CSMACD的类型判断。
再查找IF_TYPE_ETHERNET_CSMACD的资料,正是这里所需要的。
参考:IP_INTERFACE_NAME_INFO_W2KSP1结构
于是,将需要的部分复制出来加以改造,得到IsEthernet方法,结合净包中已有的方法,参数使用。接口的指数来使用。
完整代码如下:
package machine import ( “才能errors" “才能net" “才能os" “才能strings" “才能syscall" ,,“unsafe" “;golang.org/x/sys/windows"才能; ) , func GetMACAddress(),(字符串,,错误),{ ,,,err netInterfaces:=, net.Interfaces () if 才能;err  !=, nil { ,,,恐慌(err.Error ()) ,,} , ,,mac, macerr :=,““,, errors.New (“no  valid mac address") for 才能;小姐::=,0;,小姐:& lt;, len (netInterfaces);,我+ +,{ ,,,if (netInterfaces[我].Flags& net.FlagLoopback),==, 0,,,, strings.Contains (netInterfaces[我].Flags.String (),“broadcast"), { ,,,,,index :=, netInterfaces[我].Index , ,,,,,if isEthernet(索引),{ ,,,,,,,mac =, netInterfaces[我].HardwareAddr.String () ,,,,,,,return mac, nil ,,,,,} ,,,} ,,} return 才能;mac, macerr } ,//,根据网卡接口,Index 判断其是否为,Ethernet 网卡 func isEthernet (ifindex int), bool { 原子吸收光谱法,才能,err :=, adapterAddresses () if 才能;err  !=, nil { ,,,return 错误的 ,,} result 才能;:=,假的 for 才能,_,aa :=, range aas { ,,,index :=aa.IfIndex ,,,if ifindex ==, int(索引),{ ,,,,,switch aa.IfType { ,,,,,case windows.IF_TYPE_ETHERNET_CSMACD: ,,,,,,,result =,真的 ,,,,,} , ,,,,,if result { ,,,,,,,休息 ,,,,,} ,,,} ,,} return 才能结果 } ,//时间从大敌;;net/interface_windows.go 中复制过的来 func adapterAddresses (), ([] * windows.IpAdapterAddresses,,错误),{ var 才能;b []字节 l 才能;:=,uint32 (15000),//, recommended initial 大小 for {才能 null null null null null null null null null null null null null null null null null null null null null利用golang怎么对网卡信息进行获取