golang使用gopacket包进行数据包捕获实践(未成功)

想用go抓TCP包,参考:https://www.cnblogs.com/lanyangsh/p/9821106.html,结果运行时提示wpcap.dll有问题,从网上下载了几个都不行。后来安装了win10Pcap,似乎可以了。但又提示:Error opening adapter: ??????????ɡ? (0)

改为参考:https://blog.csdn.net/warrior_0319/article/details/83150408

1、获取所有的网络设备信息,代码:

package main

import (
    "fmt"
    "log"

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

func main() {
    // Find all devices
    devices, err := pcap.FindAllDevs()
    if err != nil {
        log.Fatal(err)
    }

    // Print device information
    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)
        }
    }
}

2 打开设备实时捕捉,代码:

package main

import (
    "fmt"
    "log"
    "time"

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

var (
    device       string = "eth0"
    snapshot_len int32  = 1024
    promiscuous  bool   = false
    err          error
    timeout      time.Duration = 30 * time.Second
    handle       *pcap.Handle
)

func main() {
    // Open device
    handle, err = pcap.OpenLive(device, snapshot_len, promiscuous, timeout)
    if err != nil {
        log.Fatal(err)
    }
    defer handle.Close()

    // Use the handle as a packet source to process all packets
    packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
    for packet := range packetSource.Packets() {
        // Process packet here
        fmt.Println(packet)
    }
}

然而,运行时再次遇到: Error opening adapter: ??????????ɡ? (0),感觉还是Pcap的问题,从https://www.winpcap.org/install/default.htm官网重新下载安装,还不行。

3 抓取结果保存为pcap格式文件

package main

import (
    "fmt"
    "os"
    "time"

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

var (
    deviceName  string = "eth0"
    snapshotLen uint32 = 1024
    promiscuous bool   = false
    err         error
    timeout     time.Duration = -1 * time.Second
    handle      *pcap.Handle
    packetCount int = 0
)

func main() {
    // Open output pcap file and write header
    f, _ := os.Create("test.pcap")
    w := pcapgo.NewWriter(f)
    w.WriteFileHeader(snapshotLen, layers.LinkTypeEthernet)
    defer f.Close()

    // Open the device for capturing
    handle, err = pcap.OpenLive(deviceName, int32(snapshotLen), promiscuous, timeout)
    if err != nil {
        fmt.Printf("Error opening device %s: %v", deviceName, err)
        os.Exit(1)
    }
    defer handle.Close()

    // Start processing packets
    packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
    for packet := range packetSource.Packets() {
        // Process packet here
        fmt.Println(packet)
        w.WritePacket(packet.Metadata().CaptureInfo, packet.Data())
        packetCount++

        // Only capture 100 and then stop
        if packetCount > 100 {
            break
        }
    }
}

同样是: Error opening adapter: ??????????ɡ? (0)

大概需要改用wireshark了

原文地址:https://www.cnblogs.com/pu369/p/12299239.html

时间: 2024-10-11 05:19:39

golang使用gopacket包进行数据包捕获实践(未成功)的相关文章

[Wireshark]_002_玩转数据包

通过前一篇文章,我们大概了解了Wireshark,现在可以准备好进行数据包的捕获和分析了.这一片我们将讲到如何使用捕获文件,分析数据包以及时间格式显示等. 1.使用捕获文件 进行数据包分析时,其实很大一部分分析是在数据包捕获后进行的.有时我们还会在不同时间进行多次捕获,并保存下来,然后一起进行分析,可将多个数据包合并. [1]导出和保存捕获数据包(File->Save As) [2].合并数据包,File->Merge,弹出Merge with Capture File窗口. 2.分析数据包

利用libpcap分析网络上的数据包(入门级)

本文可任意转载,但请保留作者及出处作者:rainfish出处:http://blog.csdn.net/bat603/经过几天的突击,终于明白了怎样在局域网内抓包,这可是我多年来的梦想.首先说说我的学习过程,一开始从网上搜索了关于sniffer大量资料,大致学会了,可是仔细分析结果发现,都是本机上的数据包,而不是整个局域网的.于是又查资料,在 linuxsir上有高人指点,说,现在局域网内都是交换机联接,而不是以前的Hub所以,如果要抓整个局域网的数据包,必须用libpcap,于是又查了许多关于

第一次实验报告:使用Packet Tracer分析HTTP数据包

目录 1 实验目的 2 实验内容 3. 实验报告 1 实验目的 熟练使用Packet Tracer工具.分析抓到的HTTP数据包,深入理解:HTTP协议,包括语法.语义.时序. 2 实验内容 客户端向服务器发送请求报文,服务器向客户端发送响应报文.具体包含: 建立网络拓扑结构 配置参数 抓包 分析数据包 3. 实验报告 在写报告之前,先仔细阅读:将作业提交到班级博客的一些注意事项. (1)在博文开头给出你的个人信息 姓名 学号 班级 (2)建立网络拓扑结构 给出网络拓扑结构图,并简要解释. (3

Wireshark 入门教程(叁) 数据包操作,首选项与抓包设置

2 数据包操作 2.1 标记数据包 以上标记为临时标记,重启软件失效. 『新建着色规则-』 中,可以编辑并保存新的配色规则,一般不建议修改. 2.2 注释数据包 为数据包添加自己的注释内容 2.3 合并,打印,导出数据包 菜单栏 -> 文件 -> 合并 菜单栏 -> 文件 -> 打印 菜单栏 -> 文件 -> 导出 可以先添加显式过滤器(如只显示 http 协议的包),然后导出时,选择 『Displayed』:其它的,还有导出选择的,标记的等等. 3 首选项设置 菜单栏

CoAP学习笔记——nodeJS node-coap返回JSON数据包

0 前言 本文说明如何使用node-coap返回JSON数据包.CoAP是专门为物联网系统开发的面向网络的应用层协议栈,CoAP建立在UDP协议之上尽可能减少网络开销,又具有HTTP Restful类型的特性.node-coap使用nodejs实现了coap的客户端和服务器端. [测试环境]--ubuntu/Linux [相关博文] [CoAP协议文档--The Constrained Application Protocol (CoAP)] [CoAP协议学习--CoAP基础] [CoAP学习

C语言分析数据包程序

#include <pcap.h> #include <stdlib.h> #include <malloc.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <time.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types

数据包重放

数据包重放 0x00 介绍 本篇要介绍的是如何修改数据包和数据包重放的一些知识和方法.主要针对IPS等“安全盒子”产品的研发工程师们进行测试使用. 0x01 数据修改 测试产品过程中,可能会需要修改很多的参数.至于数据包的具体内容此处不进行细致的讲解.我们主要介绍数据包修改的方法和工具. 利用软件Colasoft Packet Builder 1.0,看到可以修改数据包 内容,但该软件修改mac后,数据包会发生错误.此处主要原因是mac修改后,checksum并没有修改.因此如果要继续使用该方法

openVswitch(OVS)源代码分析之工作流程(收发数据包)

前面已经把分析openVswitch源代码的基础(openVswitch(OVS)源代码分析之数据结构)写得非常清楚了,虽然访问的人比较少,也因此让我看到了一个现象:第一篇,openVswitch(OVS)源代码分析之简介其实就是介绍了下有关于云计算现状和openVswitch的各个组成模块,还有笼统的介绍了下其工作流程,个人感觉对于学习openVswitch源代码来说没有多大含金量.云计算现状是根据公司发展得到的个人体会,对学习openVswitch源代码其实没什么帮助:openVswitch

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,