详解Go如何快速实现驱动层流量抓包

本篇文章给大家带来了关于golang的相关知识,其中主要给大家聊聊golang中怎么实现驱动层流量抓包,感兴趣的朋友一起来看一下吧,希望对大家有帮助。

一、驱动抓包

应用层抓包我们可以使用Fiddler、Httpdebugger、Charles等工具,如果需要获取更底层网卡的数据,就没法实现了,我们就需要使用谷歌的gopacket包。

二、遇到问题

gopacket的文档丰富,这里不赘述如何去使用它,使用gopacket有一个前提:在Linux上需要提前安装Npcap,在Windows上则需要提前安装Winpcap,否则无法使用,会提示缺少相关的动态链接库,这对于一些有洁癖的人来说就不太友好了,他们并不想去安装多余的软件,后面我们就来研究一下如何解决这个问题。

三、尝试解决

首先我们不安装任何工具,看一下错误提示,我这里使用的是Windows系统:

couldn't load wpcap.dll

登录后复制

提示我们没有找到wpcap.dll,这很好理解,我们的确没有,先来看看dll在系统内的加载顺序:

EXE所在目录    ↓当前目录GetCurrentDirectory();    ↓系统目录GetSystemDirectory();    ↓WINDOWS目录GetWindowsDirectory();    ↓环境变量PATH所包含的目录。

登录后复制

那解决办法就很简单了,去下载一个wpcap.dll放到exe所在目录不就行了吗,但事实证明这样并不行,还是提示没有找到链接库。随后,我又调用了一些Windows的接口,手动设置dll的目录:

package mainimport (    "fmt"    "github.com/google/gopacket/pcap"    "golang.org/x/sys/windows"    "os"    "path/filepath"    "unsafe")func main() {    kernel32, err := windows.LoadDLL("kernel32.dll")    if err != nil {        fmt.Println(err.Error())        return    }    proc, err := kernel32.FindProc("AddDllDirectory")    if err != nil {        fmt.Println(err.Error())        return    }    // 获取绝对路径    absolute,err := os.Executable()    if err != nil {        fmt.Println(err.Error())        return    }    absolute = filepath.Join(absolute,"../")    utf16Ptr, err := windows.UTF16FromString(absolute)    if err != nil {        fmt.Println(err.Error())        return    }    r1, r2, err := proc.Call(uintptr(unsafe.Pointer(&utf16Ptr[0])))    fmt.Println(r1, r2, err)    version := pcap.Version()    fmt.Println(version)}

登录后复制

结果还是找不到链接库,到这里,我们能用的方法都失效了。在谷歌上,也有类似的问题,但是没人能给出解决方案,都是让我们安装Winpcap,问题好像无解。

四、解决方案

使用dependency查看内部依赖

b74dc35b9f410bdfc8dd1af2a0402dc.jpg

在折腾了几个小时候,找到了一个解决方案:

将wpcap.dll复制一份到system32目录

将packet.dll复制一份到system32目录

将npf.sys驱动复制一份到system32下的drivers目录

现在就不需要安装任何软件也可以调用gopacket

fmt.Println(pcap.Version())

登录后复制

输出

WinPcap version 4.1.3 (packet.dll version 4.1.0.2980), based on libpcap version 1.0 branch 1_0_rel0b (20091008)

登录后复制

【相关推荐:Go视频教程】

以上就是详解Go如何快速实现驱动层流量抓包的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2414385.html

(0)
上一篇 2025年3月3日 00:37:33
下一篇 2025年3月1日 16:47:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 一文彻底搞清golang占位符

    本篇文章给大家带来了关于golang的相关知识,其中主要给大家聊聊golang中的占位符,感兴趣的朋友一起来看一下吧,希望对大家有帮助。 xdm ,写 C/C++ 语言的时候有格式控制符,例如 %s , %d , %c , %p 等等 在写…

    2025年3月3日
    200
  • go语言是系统语言吗

    go语言是系统语言。Go语言是一门系统级语言,它为解决大型系统开发过程中的实际问题而设计,支持并发、规范统一、简单优雅,性能强大;它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C 等编译型语言的性能与安全性”。Go语言专门…

    2025年3月3日
    200
  • 深入探讨Golang的除法运算

    golang是一种高效、快速、强大和可靠的编程语言,使用起来十分方便和容易。随着golang语言的发展和应用范围的扩大,越来越多的用户开始对其除法运算的性能、精度和可靠性提出了更高的要求。 在本文中,我们将深入探讨Golang的除法运算,包…

    编程技术 2025年3月3日
    200
  • 一文详解golang中的注释

    golang是一种编程语言,它有着比较高的代码可读性和简洁性。然而,在编写代码时,总有些地方需要添加注释来帮助解释某些细节或者增加代码的可读性。在这篇文章中,我们将介绍一些关于golang注释的内容。 一、单行注释 单行注释是在代码行的末尾…

    编程技术 2025年3月3日
    200
  • golang是什么?怎么应用?

    golang(又称go语言)是一种开源的编程语言,由robert griesemer、rob pike和ken thompson创建。golang主要用于系统级编程,网络编程和分布式系统。 起源和历史 Golang的设计始于2007年,最初…

    编程技术 2025年3月3日
    200
  • 怎么安装go环境(win+linux系统)

    golang 是 google 推出的一种编程语言,它具有高性能、高并发和简洁易懂等特点,适用于开发网络编程、高并发服务器、云计算等领域。越来越多的开发者开始关注和学习 golang。本文将介绍如何在 windows 和 linux 操作系…

    编程技术 2025年3月3日
    200
  • ubuntu上怎么安装golang?(步骤分享)

    golang是一种现代化的编程语言,拥有强大的性能和高效的开发工具,它非常适合开发云计算、网络应用和分布式系统等领域。在ubuntu系统上安装golang可以让您立即开始开发。 在本文中,我们将会介绍如何在Ubuntu系统上安装Golang…

    编程技术 2025年3月3日
    200
  • 浅析go语言转发功能的实现和应用场景

    随着互联网的飞速发展,网络技术得到了迅速的普及和应用,其优异的性能和稳定性为现代的web应用提供了强有力的支持。随着web应用的发展,语言也不断发展壮大,其中谷歌推出的go语言(golang)以其快速响应和高效率的特性,备受开发者青睐。近年…

    编程技术 2025年3月3日
    200
  • linux系统上怎么安装golang

    golang是一个高效、强大、免费的开源编程语言,目前被广泛应用在大型分布式系统和网络编程领域。如果你正在准备使用golang并充分发挥其优势,那么首先要做的就是在你的linux操作系统上进行安装。 本文将向你展示如何在Linux上安装Go…

    编程技术 2025年3月3日
    200
  • mac怎么安装和配置go语言环境

    在mac电脑上使用go语言需要先安装go语言开发环境。go语言是一种非常强大的编程语言,拥有快速、高效、可靠的功能,非常适合用于编写高性能的应用程序。本文将介绍如何在mac上安装go语言开发环境,让你快速开始go语言编程之旅。 第一步:下载…

    编程技术 2025年3月3日
    200

发表回复

登录后才能评论