Golang获取Windows网卡信息

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}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容