利用golang怎么对网卡信息进行获取

  介绍

这篇文章给大家介绍利用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结构

利用golang怎么对网卡信息进行获取

于是,将需要的部分复制出来加以改造,得到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怎么对网卡信息进行获取