windows下獲取pci網(wǎng)卡信息

功能:獲取windows平臺(tái)下跋破、獲取本機(jī)的物理網(wǎng)卡、包括虛擬網(wǎng)卡和USB外置網(wǎng)卡
實(shí)現(xiàn)

package main

// 獲取本機(jī)pci接口的網(wǎng)卡信息调煎、去除了虛擬網(wǎng)卡和usb網(wǎng)卡等信息
// 可獲取到的網(wǎng)卡信息:網(wǎng)卡ID、網(wǎng)卡IPV4地址、網(wǎng)卡IPV6地址、MAC地址

import (
    "fmt"
    "github.com/StackExchange/wmi"
    "golang.org/x/sys/windows/registry"
    "log"
    "strings"
    "time"
)

const (
    PCI = iota
    USB
)

// Win32_NetworkAdapterConfiguration 網(wǎng)絡(luò)適配器類名耿眉、名稱不可更改
type Win32_NetworkAdapterConfiguration struct {
    Caption                      string
    Description                  string
    SettingID                    string
    ArpAlwaysSourceRoute         bool
    ArpUseEtherSNAP              bool
    DatabasePath                 string
    DeadGWDetectEnabled          bool
    DefaultIPGateway             []string
    DefaultTOS                   uint8
    DefaultTTL                   uint8
    DHCPEnabled                  bool
    DHCPLeaseExpires             *time.Time
    DHCPLeaseObtained            *time.Time
    DHCPServer                   string
    DNSDomain                    string
    DNSDomainSuffixSearchOrder   []string
    DNSEnabledForWINSResolution  bool
    DNSHostName                  string
    DNSServerSearchOrder         []string
    DomainDNSRegistrationEnabled bool
    ForwardBufferMemory          uint32
    FullDNSRegistrationEnabled   bool
    GatewayCostMetric            []int32
    IGMPLevel                    uint8
    Index                        uint32
    InterfaceIndex               uint32
    IPAddress                    []string
    IPConnectionMetric           uint32
    IPEnabled                    bool
    IPFilterSecurityEnabled      bool
    IPPortSecurityEnabled        bool
    IPSecPermitIPProtocols       []string
    IPSecPermitTCPPorts          []string
    IPSecPermitUDPPorts          []string
    IPSubnet                     []string
    IPUseZeroBroadcast           bool
    IPXAddress                   string
    IPXEnabled                   bool
    IPXFrameType                 []uint32
    IPXMediaType                 uint32
    IPXNetworkNumber             []string
    IPXVirtualNetNumber          string
    KeepAliveInterval            uint32
    KeepAliveTime                uint32
    MACAddress                   string
    MTU                          uint32
    NumForwardPackets            uint32
    PMTUBHDetectEnabled          bool
    PMTUDiscoveryEnabled         bool
    ServiceName                  string
    TcpipNetbiosOptions          uint32
    TcpMaxConnectRetransmissions uint32
    TcpMaxDataRetransmissions    uint32
    TcpNumConnections            uint32
    TcpUseRFC1122UrgentPointer   bool
    TcpWindowSize                uint16
    WINSEnableLMHostsLookup      bool
    WINSHostLookupFile           string
    WINSPrimaryServer            string
    WINSScopeID                  string
    WINSSecondaryServer          string
}

// NetWorkInterface 對(duì)外輸出網(wǎng)絡(luò)接口
type NetWorkInterface struct {
    Type          uint64
    TypeId        int
    Name          string
    PnPInstanceId string
    IP4Addr       string
    IP6Addr       string
    MACAddr       string
}

// WbemQuery 通過(guò)wmi接口獲取ip網(wǎng)卡信息
func WbemQuery() []NetWorkInterface {
    s, err := wmi.InitializeSWbemServices(wmi.DefaultClient)
    if err != nil {
        log.Fatalf("InitializeSWbemServices: %s", err)
    }

    var dst []Win32_NetworkAdapterConfiguration
    q := wmi.CreateQuery(&dst, "WHERE IPEnabled=True")
    errQuery := s.Query(q, &dst)
    if errQuery != nil {
        log.Fatalf("Query1: %s", errQuery)
    }
    var netInterface []NetWorkInterface
    for _, value := range dst {
        netInfo, flag := ReadRegedit(value.SettingID)
        if flag {
            result := NetWorkInterface{
                Type:          netInfo.Type,
                Name:          netInfo.Name,
                PnPInstanceId: netInfo.PnPInstanceId,
                IP4Addr:       value.IPAddress[0],
                IP6Addr:       value.IPAddress[1],
                MACAddr:       value.MACAddress,
            }
            netInterface = append(netInterface, result)
        }
    }
    return netInterface
}

// ReadRegedit 讀取注冊(cè)表、獲取網(wǎng)卡類型、判斷PCI標(biāo)識(shí)
func ReadRegedit(netId string) (NetWorkInterface, bool) {
    var result NetWorkInterface
    key, err := registry.OpenKey(registry.LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\"+netId+"\\Connection", registry.READ)
    if err != nil {
        log.Fatal(err)
    }
    defer key.Close()
    value, _, err := key.GetStringValue("PnPInstanceId")
    Type, _, err := key.GetIntegerValue("MediaSubType")
    Name, _, err := key.GetStringValue("Name")
    if err != nil {
        return result, false
    }
    // 獲取pnpId中含有PCI(內(nèi)置網(wǎng)卡)或USB(外掛網(wǎng)卡)
    
    if strings.Count(value, "PCI") > 0 {
        result.Type = Type
        result.TypeId = PCI
        result.Name = Name
        result.PnPInstanceId = value
        return result, true
    } else {
        if strings.Count(value, "USB") > 0 {
            result.Type = Type
            result.TypeId = USB
            result.Name = Name
            result.PnPInstanceId = value
            return result, true
        }
    }
    return result, false

}

func main() {
    fmt.Println(WbemQuery())
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沟饥,隨后出現(xiàn)的幾起案子赏陵,更是在濱河造成了極大的恐慌西土,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铛纬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門唬滑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)告唆,“玉大人,你說(shuō)我怎么就攤上這事晶密』谙辏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵惹挟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缝驳,道長(zhǎng)连锯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任用狱,我火速辦了婚禮运怖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夏伊。我一直安慰自己摇展,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布溺忧。 她就那樣靜靜地躺著咏连,像睡著了一般盯孙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祟滴,一...
    開(kāi)封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天振惰,我揣著相機(jī)與錄音,去河邊找鬼垄懂。 笑死骑晶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的草慧。 我是一名探鬼主播桶蛔,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼漫谷!你這毒婦竟也來(lái)了仔雷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抖剿,失蹤者是張志新(化名)和其女友劉穎朽寞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斩郎,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脑融,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缩宜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肘迎。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锻煌,靈堂內(nèi)的尸體忽然破棺而出妓布,到底是詐尸還是另有隱情,我是刑警寧澤宋梧,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布匣沼,位于F島的核電站,受9級(jí)特大地震影響捂龄,放射性物質(zhì)發(fā)生泄漏释涛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一倦沧、第九天 我趴在偏房一處隱蔽的房頂上張望唇撬。 院中可真熱鬧,春花似錦展融、人聲如沸窖认。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扑浸。三九已至烧给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間首装,已是汗流浹背创夜。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仙逻,地道東北人驰吓。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像系奉,于是被迫代替她去往敵國(guó)和親檬贰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一個(gè)普通的Android手機(jī)缺亮,居然有至少2個(gè)網(wǎng)卡翁涤。至少有SIM卡上網(wǎng)卡的網(wǎng)卡,至少有WiFi網(wǎng)卡萌踱。對(duì)于連接在...
    ReadyShow閱讀 2,810評(píng)論 0 0
  • 前言 正常情況下葵礼,如果想要查看電腦的網(wǎng)卡IP地址或是MAC地址,直接通過(guò)界面找到網(wǎng)卡進(jìn)行查看就有了并鸵,亦或是通過(guò)命令...
    點(diǎn)滴技術(shù)閱讀 1,826評(píng)論 0 0
  • 一臺(tái)機(jī)器上可能不只有一個(gè)網(wǎng)卡鸳粉,但每一個(gè)網(wǎng)卡只有一個(gè)MAC地址,而每一個(gè)網(wǎng)卡可能配置有多個(gè)IP地址园担;如平常的筆記本電...
    看點(diǎn)書閱讀 1,547評(píng)論 0 0
  • 實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)通過(guò)VC6.0平臺(tái)設(shè)計(jì)獲取本機(jī)網(wǎng)卡信息的界面届谈,主要包括網(wǎng)卡類型,子網(wǎng)掩碼弯汰,默認(rèn)網(wǎng)關(guān)艰山,本地鏈接,本機(jī)...
    小蕓兒閱讀 626評(píng)論 0 0
  • 久違的晴天咏闪,家長(zhǎng)會(huì)曙搬。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了鸽嫂。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)纵装。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評(píng)論 16 22