1. 根据net包获取网卡信息
// 1. 批量获取
addrs, err := net.Interfaces()
// 2. 根据网卡Index或网卡Name获取
addr, err := net.InterfaceByIndex(index) // 根据index获取
addr, err := net.InterfaceByName(name) // 根据name获取
// 3. net包可以获取到的网卡信息
// Interface represents a mapping between network interface name
// and index. It also represents network interface facility
// information.
type Interface struct {
Index int // positive integer that starts at one, zero is never used
MTU int // maximum transmission unit
Name string // e.g., "en0", "lo0", "eth0.100"
HardwareAddr HardwareAddr // IEEE MAC-48, EUI-48 and EUI-64 form
Flags Flags // e.g., FlagUp, FlagLoopback, FlagMulticast
}
2. 根据syscall包获取net包中没有的网卡信息
// 根据syscall包获取网卡信息 (底层原理是通过windows dll api获取)
func getAdapter() (*syscall.IpAdapterInfo, error) {
bTmp := make([]byte, 15000)
length := uint32(len(bTmp))
adtr := (*syscall.IpAdapterInfo)(unsafe.Pointer(&bTmp[0]))
if err := syscall.GetAdaptersInfo(adtr, &length); err == syscall.ERROR_BUFFER_OVERFLOW {
bTmp = make([]byte, length)
adtr = (*syscall.IpAdapterInfo)(unsafe.Pointer(&bTmp[0]))
if err = syscall.GetAdaptersInfo(adtr, &length); err != nil {
return nil, os.NewSyscallError("GetAdaptersInfo", err)
}
}
return adtr, nil
}
// syscall包可以获取到的网卡信息
type IpAdapterInfo struct {
Next *IpAdapterInfo
ComboIndex uint32
AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte
Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
AddressLength uint32
Address [MAX_ADAPTER_ADDRESS_LENGTH]byte
Index uint32
Type uint32
DhcpEnabled uint32
CurrentIpAddress *IpAddrString
IpAddressList IpAddrString
GatewayList IpAddrString
DhcpServer IpAddrString
HaveWins bool
PrimaryWinsServer IpAddrString
SecondaryWinsServer IpAddrString
LeaseObtained int64
LeaseExpires int64
}
3. 获取wifi ssid
// 利用cmd 获取 netsh wlan show interfaces
cmd := exec.Command("netsh", "wlan", "show", "interfaces")
// cmd 禁止弹出小黑窗
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}