问题标签 [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.
go - gopacket解析Dot11层
我正在尝试使用 gopacket 解析 .pcap 文件的数据包,并且几乎可以获取其中的所有信息,直到现在如果我尝试使用过滤器,我会得到截断的信息或错误。
这将返回:
例如,我想查看每个层内的数据包的 SSID 或更多信息,但每次我尝试深入了解我得到的项目时:
上述输出的代码
但实际上我想知道 Dot11 层的 SSID/BSSID 和包内的标志。
sockets - Golang将gopacket udpLayer转换为字节并发送
我正在使用 gopacket/layers api 从数据包中提取 upd 数据,然后通过另一个 udp 流再次发送它,我不确定这样做是否正确,如果有人可以指出我也遇到了一些错误我的代码正确的方向
go - 如何将修改后的 Go 数据包序列化为真实 IP 数据包
为什么
我想写一个代理服务器,代理服务器更改数据包的 IP/端口并发出修改。
试图
输出
怎么了
第二个十六进制转储必须以 45 开头(大多数 IPv4 数据包以 45 开头,其中 4 是协议的版本)。第二个 hexdump 在许多细节上必须与第一个相同,除了一个 IP 地址已更改、TCP 校验和和大小值。第二个十六进制转储必须包含有效载荷1234567890\n
。
类似问题
go - 如何获取 IP 数据包并注入不同的 VM 和接口
我一直在尝试解决这两个问题,但没有成功。
我想知道是否可以从使用 Gopacket 的接口中删除特定的数据包,还是只是为了在网络上监听?例如,当我将 UDP 数据包发送到错误的端口,然后使用 Gopacket 进行更正时,它将发送 2 个数据包,1 个到错误的端口,1 个到正确的端口。有没有办法用 Gopacket 丢弃/丢弃错误的数据包?
我要做的是获取客户端通过 IP 发送的所有数据包,然后将每个数据包封装为另一个协议 X 中的有效负载,然后发送到将在协议 X 上接收的远程主机,获取有效负载并在其接口上发送它以再次通过 IP 到达服务器。(IP(客户端)-> 协议 X(嗅探器 1)-> 协议 X(嗅探器 2)-> IP(服务器))
我已经验证了嗅探器 1 从客户端接口获取的数据包与到达嗅探器 2 的数据包相同,但问题是当嗅探器 2 将其注入服务器接口时。我无法使用 tcpdump 或任何其他工具查看该数据包。使用以下命令注入数据包:
如果避免使用协议 X 部分,则服务器将接收来自客户端的消息,但使用协议 X 则不可能。
提前致谢!
go - 从捕获向数据包添加自定义层失败
我正在尝试在 TCP 上实现自己的解码层,到目前为止,它仅在我创建没有任何 Eth/IP/TCP 标头的数据包并将其层手动设置为我的自定义层时才有效。自定义协议的数据在一个普通的 TCP 有效载荷内。
如何仅将 TCP 层的有效负载解码为另一层?
大部分代码来自devdungeon 的这篇很棒的帖子。
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-
请帮帮我。
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
go - 当 NextDecoder 依赖于上一层而不是当前层时,如何正确编写自定义层?
我正在用gopacket编写自定义层解码器。
LayerA包含一个Type
可以是以下值之一的字段:
- B-only,下一层是LayerB,后面是原始有效载荷
- C-only,下一层是LayerC,后面是原始有效载荷
- BC,下一层是LayerB,然后是LayerC ,然后是原始有效负载
LayerB中没有字段可以用来知道LayerC是否是下一个。LayerB和LayerC解码不依赖于其他层是否存在。
编写LayerA的解码函数的正确方法是什么,因为它知道下一层是什么?
关于使用gopacket自定义层的教程并不多,而且这种情况与那里介绍的基本情况不同。
看来逻辑应该放在LayerA解码函数中,就在调用p.NextDecoder
.
我想到了两种方法来实现这一点:
1.使用闭包
nextDecoder Decoder
向结构LayerB添加一个字段。在LayerA的解码器中,当Type
是C-only时,只需使用LayerC的解码器。否则,创建一个结构LayerB并相应地填充该字段nextDecoder
。然后在闭包中使用这个结构,它将用作下一个解码器。
问题
LayerB的解码逻辑将在LayerA解码函数中(参见下面 Palyground 中的代码)。此外,在注册LayerB时使用哪个解码函数gopacket.RegisterLayer
?
2.有两个单独的层LayerB-C和LayerB-only
LayerB-C下一个解码器将是LayerC
's,LayerB-only将只是有效载荷层。
问题
LayerB-only和LayerB-C的解码功能是一样的,除了调用p.NextDecoder
. 由于 go 中没有“继承”的概念,我不确定如何设计它以避免重复。也许创建一个带有函数的基于LayerB 的接口nextDecoder() LayerType
,并让LayerB-C和LayerB-only实现它?还是嵌入具有功能的类型LayerB-baseDecode
?但他们都感觉不对劲。
代码
以下是每种描述方式的一些代码:https: //play.golang.org/p/N9ZpYqFb16Q。图层的实际内容不相关,除了LayerA.Type
.
这段代码的结果符合预期,但我想知道是否有更好或更惯用的方法。
go - 如何使用 gopacket 解析 802.11 探测请求帧中的信息元素
Gopacket 支持解析信标和探测响应帧中的信息元素,如下所示:
但是 gopacket 不支持解析探测请求帧中的信息元素。我只能packet.Layer(layers.LayerTypeDot11MgmtProbeReq).(*layers.Dot11MgmtProbeReq)
用来获取Contents和Payload,信息元素在这个Contents中。
那么如何解析探测请求帧中的这些信息元素呢?
go - 使用 gopacket 向 127.0.0.1 发送 UDP 数据包
我正在尝试使用 gopacket 向 127.0.0.1 发送一个 UDP 数据包。这是我的代码:
在终端中,我使用 netcat 监听传入的数据包:
当我运行我的代码时,我可以在环回接口上的wireshark中看到生成的数据包具有正确的校验和,但数据包永远不会到达netcat。可能是什么问题?