问题标签 [gopacket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1384 浏览

go - gopacket解析Dot11层

我正在尝试使用 gopacket 解析 .pcap 文件的数据包,并且几乎可以获取其中的所有信息,直到现在如果我尝试使用过滤器,我会得到截断的信息或错误。

这将返回:

例如,我想查看每个层内的数据包的 SSID 或更多信息,但每次我尝试深入了解我得到的项目时:

上述输出的代码

但实际上我想知道 Dot11 层的 SSID/BSSID 和包内的标志。

0 投票
1 回答
647 浏览

sockets - Golang将gopacket udpLayer转换为字节并发送

我正在使用 gopacket/layers api 从数据包中提取 upd 数据,然后通过另一个 udp 流再次发送它,我不确定这样做是否正确,如果有人可以指出我也遇到了一些错误我的代码正确的方向

0 投票
1 回答
3910 浏览

go - 如何将修改后的 Go 数据包序列化为真实 IP 数据包

为什么

我想写一个代理服务器,代理服务器更改数据包的 IP/端口并发出修改。

试图

输出

怎么了

第二个十六进制转储必须以 45 开头(大多数 IPv4 数据包以 45 开头,其中 4 是协议的版本)。第二个 hexdump 在许多细节上必须与第一个相同,除了一个 IP 地址已更改、TCP 校验和和大小值。第二个十六进制转储必须包含有效载荷1234567890\n

类似问题

  1. 如何使用 Golang 组合原始 TCP 数据包(使用 gopacket)并通过原始套接字发送
  2. 使用 gopacket 发送 UDP 数据包
  3. 更改 Gopacket 的 IP 地址并使用原始套接字重新传输
0 投票
1 回答
265 浏览

go - 如何获取 IP 数据包并注入不同的 VM 和接口

我一直在尝试解决这两个问题,但没有成功。

  1. 我想知道是否可以从使用 Gopacket 的接口中删除特定的数据包,还是只是为了在网络上监听?例如,当我将 UDP 数据包发送到错误的端口,然后使用 Gopacket 进行更正时,它将发送 2 个数据包,1 个到错误的端口,1 个到正确的端口。有没有办法用 Gopacket 丢弃/丢弃错误的数据包?

  2. 我要做的是获取客户端通过 IP 发送的所有数据包,然后将每个数据包封装为另一个协议 X 中的有效负载,然后发送到将在协议 X 上接收的远程主机,获取有效负载并在其接口上发送它以再次通过 IP 到达服务器。(IP(客户端)-> 协议 X(嗅探器 1)-> 协议 X(嗅探器 2)-> IP(服务器))

我已经验证了嗅探器 1 从客户端接口获取的数据包与到达嗅探器 2 的数据包相同,但问题是当嗅探器 2 将其注入服务器接口时。我无法使用 tcpdump 或任何其他工具查看该数据包。使用以下命令注入数据包:

如果避免使用协议 X 部分,则服务器将接收来自客户端的消息,但使用协议 X 则不可能。

提前致谢!

0 投票
1 回答
1254 浏览

go - 从捕获向数据包添加自定义层失败

我正在尝试在 TCP 上实现自己的解码层,到目前为止,它仅在我创建没有任何 Eth/IP/TCP 标头的数据包并将其层手动设置为我的自定义层时才有效。自定义协议的数据在一个普通的 TCP 有效载荷内。

如何仅将 TCP 层的有效负载解码为另一层?

大部分代码来自devdungeon 的这篇很棒的帖子

0 投票
0 回答
314 浏览

go - 当我使用 goroutines 使用“github.com/google/gopacket/pcap”从多个接口设备捕获数据包时出现运行时错误

我想使用“github.com/google/gopacket/pcap”在 4 个接口设备 eth0、eth1、eth2 和 eth3 上捕获数据包。我使用的机器流量很大。可以说它每分钟缺乏。我使用 goroutines 在每个设备上并行捕获数据包。

当我在 centOS 7 机器上运行我的二进制代码时,一段时间后(在 1 小时或更短时间后)出现以下错误之一。

1) 运行时:指针 0xc441198b80 指向未分配的 span idx=0x108cc span.base()=0xc441196000 span.limit=0xc441197ff0 span.state=3 致命错误:在 Go 堆中发现错误的指针(不正确使用 unsafe 或 cgo?)

2) 分段错误

3) 致命错误:systemstack 从意外的 goroutine Segmentation fault 调用

我如何使用 goroutines-

请帮帮我。

0 投票
1 回答
585 浏览

go - gopacket ubuntu16.04 错误未定义:pcapErrorNotActivated

root@ubuntu:~/processNet/processNet# go run testversion.go

github.com/google/gopacket/pcap

/home/go/src/github.com/google/gopacket/pcap/pcap.go:30:22:未定义:pcapErrorNotActivated /home/go/src/github.com/google/gopacket/pcap/pcap.go:52 :17:未定义:pcapTPtr /home/go/src/github.com/google/gopacket/pcap/pcap.go:64:10:未定义:pcapPkthdr

0 投票
1 回答
143 浏览

go - 当 NextDecoder 依赖于上一层而不是当前层时,如何正确编写自定义层?

我正在用gopacket编写自定义层解码器。

LayerA包含一个Type可以是以下值之一的字段:

  • B-only,下一层是LayerB,后面是原始有效载荷
  • C-only,下一层是LayerC,后面是原始有效载荷
  • BC,下一层是LayerB,然后是LayerC ,然后是原始有效负载

LayerB中没有字段可以用来知道LayerC是否是下一个。LayerBLayerC解码不依赖于其他层是否存在。

编写LayerA的解码函数的正确方法是什么,因为它知道下一层是什么?

关于使用gopacket自定义层的教程并不多,而且这种情况与那里介绍的基本情况不同。

看来逻辑应该放在LayerA解码函数中,就在调用p.NextDecoder.

我想到了两种方法来实现这一点:

1.使用闭包

nextDecoder Decoder向结构LayerB添加一个字段。在LayerA的解码器中,当TypeC-only时,只需使用LayerC的解码器。否则,创建一个结构LayerB并相应地填充该字段nextDecoder。然后在闭包中使用这个结构,它将用作下一个解码器。

问题

LayerB的解码逻辑将在LayerA解码函数中(参见下面 Palyground 中的代码)。此外,在注册LayerB时使用哪个解码函数gopacket.RegisterLayer

2.有两个单独的层LayerB-C和LayerB-only

LayerB-C下一个解码器将是LayerC's,LayerB-only将只是有效载荷层。

问题

LayerB-onlyLayerB-C的解码功能是一样的,除了调用p.NextDecoder. 由于 go 中没有“继承”的概念,我不确定如何设计它以避免重复。也许创建一个带有函数的基于LayerB 的接口nextDecoder() LayerType,并让LayerB-CLayerB-only实现它?还是嵌入具有功能的类型LayerB-baseDecode?但他们都感觉不对劲。

代码

以下是每种描述方式的一些代码:https: //play.golang.org/p/N9ZpYqFb16Q。图层的实际内容不相关,除了LayerA.Type.

这段代码的结果符合预期,但我想知道是否有更好或更惯用的方法。

0 投票
2 回答
438 浏览

go - 如何使用 gopacket 解析 802.11 探测请求帧中的信息元素

Gopacket 支持解析信标和探测响应帧中的信息元素,如下所示:

但是 gopacket 不支持解析探测请求帧中的信息元素。我只能packet.Layer(layers.LayerTypeDot11MgmtProbeReq).(*layers.Dot11MgmtProbeReq) 用来获取Contents和Payload,信息元素在这个Contents中。

那么如何解析探测请求帧中的这些信息元素呢?

0 投票
1 回答
1818 浏览

go - 使用 gopacket 向 127.0.0.1 发送 UDP 数据包

我正在尝试使用 gopacket 向 127.0.0.1 发送一个 UDP 数据包。这是我的代码:

在终端中,我使用 netcat 监听传入的数据包:

当我运行我的代码时,我可以在环回接口上的wireshark中看到生成的数据包具有正确的校验和,但数据包永远不会到达netcat。可能是什么问题?