前阵子有个需求是使用 golang 抓包改包,我用到了 gopacket 这个包,但是出了一些小问题。

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

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

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

直接上代码

package mainimport ("fmt""log""net""github.com/google/gopacket/pcap"
)type IfaceInfo struct {NPFName     stringDescription stringNickName    stringIPv4        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 []IfaceInfofor _, 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())
}

转载于:https://www.cnblogs.com/Akkuman/p/11160766.html

gopacket 在 windows 上面遇到的问题相关推荐

  1. Go语言获取实时网速(gopacket实践)

    简介 gopacket是经过cgo封装的libpcap的接口,这样便于我们在go语言中使用libpcap. 前提 libpcap是Linux平台的抓包框架,它也有Windows移植版,比如winpca ...

  2. 【GoCN酷Go推荐】网络流量抓包库 gopacket介绍

    gopacket简介 1. gopacket是什么? gopacket是google出品的golang三方库,质量还是靠的住,项目地址为:github.com/google/gopacket gopa ...

  3. GCC 在 Linux、Windows 系统安装

    1. GCC 简介 谈到 GCC,就不得不提 GNU 计划.GNU 全称 GNU's Not UNIX,又被称为"革奴计划",由理查德·斯托曼于 1983 年发起.GNU 计划的最 ...

  4. Windows 64位下安装Redis详细教程

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 工具/原料 Windows 64位操作系统 Redis 安装包 方法/步骤 Redis 安装包下载 下载地址:h ...

  5. Go语言环境搭建(Windows+Linux)

    目录 1. Windows安装配置 2. Linux安装配置 1. Windows安装配置 1️⃣ 下载SDK SDK 的全称是Software Development Kit(软件开发工具包) ,包 ...

  6. Nginx最新版安装教程(Windows+Linux)

    目录 一.Nginx安装-Windows 1. 下载解压 2. 启动 3. 测试是否启动成功 4. 配置监听端口 二.Nginx安装-Linux 1. 下载解压 2. 上传到服务器 3. 配置 第一步 ...

  7. Linux 2 的 Windows 子系统上发布 CUDA

    Linux 2 的 Windows 子系统上发布 CUDA 为响应大众需求,微软 宣布 在 2020 年 5 月的 建造 大会上推出了 建造 ( WSL 2 ) – GPU 加速功能.这一特性为许多计 ...

  8. 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)

    适用于Windows和Linux的Yolo-v3和Yolo-v2(下) 如何训练(检测自定义对象): (培养老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yo ...

  9. 适用于Windows和Linux的Yolo-v3和Yolo-v2(上)

    适用于Windows和Linux的Yolo-v3和Yolo-v2(上) https://github.com/eric-erki/darknetAB (用于对象检测的神经网络)-Tensor Core ...

最新文章

  1. Python type hints 之 Optional,Union
  2. probable oracle net,ORA-28547: connection to server failed, probable Oracle Net admin error
  3. Linux SVN一次增加多个文件并批量上传
  4. idea内置junit5_JUnit的内置Hamcrest Core Matcher支持
  5. 「长文」2022年企业数字化转型的八大趋势
  6. 非常适合新手的jq/zepto源码分析05
  7. 万兆交换机用什么网线_超五类线到底是百兆线还是千兆线?家庭环境中我们要选择几类网线?...
  8. unicode转中文
  9. SQLMAP-POST注入
  10. 做人要厚道,做技术更要如此
  11. Freertos 任务切换
  12. python如何让外星人随机移动_太空入侵者游戏让外星人一起移动
  13. 《The One!团队》第八次作业:ALPHA冲刺(四)
  14. linux系统测试屏幕,RedHat Linux 9.0 操作系统测试题2
  15. MarkDown数学符号之--微分
  16. 流媒体基础-RTP协议
  17. 1198:逆波兰表达式(递归,前缀表达式,波兰表达式)
  18. android语言切换问题
  19. 记住这些,你的鼠标就可以扔掉了
  20. php车辆出险h5报告接口

热门文章

  1. java web登录状态保持_java web用于保持状态的4种方法
  2. ASP.NET Core MVC 之依赖注入 View
  3. 程序员应该多逛的几个技术网站
  4. 自定义实现moveable button
  5. Linux C中发现无法连接到math.h中的数学函数解决办法
  6. C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑
  7. julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算
  8. C# list删除 另外list里面的元素_在Python 中 List 操作 9种例子详细了解
  9. VS2008中源文件与模块生成时的文件不同,仍要让调试器使用它吗
  10. 为什么传值时加号变成了空格_URL的参数中有加号传值变为空格的问题(URL特殊字符)...