加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

gopacket 在 windows 上面遇到的问题

发布时间:2020-12-14 05:33:38 所属栏目:Windows 来源:网络整理
导读:我按照网上的方法进行使用 OpenLive 抓包,发现并不行,报错 error open adapter 啥啥啥。 经过调试发现根本找不到这个网卡,需要用 DeviceNPF_ 开头的网卡设备名,我去看了 scapy 的实现,发现使用的是 winpcap/npcap 驱动的 pcap_findalldevs 这个方法,

我按照网上的方法进行使用 OpenLive 抓包,发现并不行,报错 error open adapter 啥啥啥。

经过调试发现根本找不到这个网卡,需要用 DeviceNPF_ 开头的网卡设备名,我去看了 scapy 的实现,发现使用的是 winpcap/npcap 驱动的 pcap_findalldevs 这个方法,我去 gopacket 里面找了下,发现有个方法 pcap.FindAllDevs() 可以得到所有的网卡信息。

但是用这个方法得到的数据里面的 windows 自带的网卡的 Description 描述字段上就只有个 microsoft,压根不知道是什么东西,结合 net.interifaces() 方法中的 ip 与之前得到的数据对应起来,得到了一个简陋的方案

直接上代码

package main

import (
    "fmt"
    "log"
    "net"

    "github.com/google/gopacket/pcap"
)

type IfaceInfo struct {
    NPFName     string
    Description string
    NickName    string
    IPv4        string
}

func get_if_list() []IfaceInfo {
    var ifaceInfoList []IfaceInfo

    // 得到所有的(网络)设备
    devices,err := pcap.FindAllDevs()
    if err != nil {
        log.Fatal(err)
    }

    interface_list,err := net.Interfaces()
    if err != nil {
        log.Fatal(err)
    }

    for _,i := range interface_list {
        byName,err := net.InterfaceByName(i.Name)
        if err != nil {
            log.Fatal(err)
        }
        address,err := byName.Addrs()
        ifaceInfoList = append(ifaceInfoList,IfaceInfo{NickName: byName.Name,IPv4: address[1].String()})
    }

    // 打印设备信息
    // fmt.Println("Devices found:")
    // for _,device := range devices {
    //  fmt.Println("nName: ",device.Name)
    //  fmt.Println("Description: ",device.Description)
    //  fmt.Println("Devices addresses: ",device.Description)
    //  for _,address := range device.Addresses {
    //      fmt.Println("- IP address: ",address.IP)
    //      fmt.Println("- Subnet mask: ",address.Netmask)
    //  }
    // }
    var vaildIfaces []IfaceInfo
    for _,device := range devices {
        for _,address := range device.Addresses {
            for _,ifaceinfo := range ifaceInfoList {
                if strings.Contains(ifaceinfo.IPv4,address.IP.String()) {
                    vaildIfaces = append(vaildIfaces,IfaceInfo{NPFName: device.Name,Description: device.Description,NickName: ifaceinfo.NickName,IPv4: ifaceinfo.IPv4})
                    break
                }
            }
        }
    }

    return vaildIfaces
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读