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

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

经过调试发现根本找不到这个网卡,需要用 \Device\NPF_ 开头的网卡设备名,我去看了 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())
}

gopacket 在 windows 上面遇到的问题的更多相关文章

  1. Golang 基于libpcap/winpcap的底层网络编程——gopacket安装

    Go简介 Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性. 语法类似C/C++,但是又带有一点python的味道 其中个人认为最出色的特点就是他的包管 ...

  2. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  3. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  4. C# 注册 Windows 热键

    闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...

  5. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  6. 在离线环境中发布.NET Core至Windows Server 2008

    在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...

  7. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

随机推荐

  1. NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤<转>

    原帖地址:https://blog.csdn.net/z6482/article/details/7660748 ------------------------------------------- ...

  2. cmd命令 taskkill

    netstat -ano|findstr " tasklist|findstr " taskkill /pid taskkill 命令: // 描述: 结束一个或多个任务或流程. ...

  3. mariadb galera群集故障记录

    负责galera上执行删除语句 delete from t1 where group_id= and group_id=; 执行后,群集破坏,除了主节点存活,其他俩个节点全都停掉. 查看galera的 ...

  4. OGC定义的几何要素

    OGC定义了两种描述几何对象的格式,分别是WKB(Well-Known Binary)和WKT(Well-Known Text). 在SQL语句中,用以下的方式可以使用WKT格式定义几何对象:几何类型 ...

  5. javaweb--Rest访问(RestTemplate)

    Rest访问(RestTemplate)在实际的项目中,往往需要发送一个Get/Post请求到其他的系统(Rest API),比如向人员管理部门请求,然后解析返回信息获取该用户的基本信息等.JDK传统 ...

  6. android -------- GifView 显示gif图片

    最近的项目需要在界面显示Gif动图,查找网络资料,总结了一下,分享一下, 一个GifView的gif图加载库以有效地显示GIF, 您可以启动,暂停和停止gifView 在app 的 build.gra ...

  7. 详解 C++11 lambda表达式

    详解 C++11 lambda表达式   lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的la ...

  8. Win10 x64 pnglib Release

    Win10 x64 pnglib Release >------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------ > Checking Buil ...

  9. Flutter中的Stack、Align、Positioned的使用

    import 'package:flutter/material.dart'; import 'package:flutter_testdemo001/res/listData.dart'; void ...

  10. 使用java移位运算符进行转化

    import java.util.Scanner; public class Main { public static void main(String[] args) { new Main().sy ...