0

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

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

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

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

if handle, err := pcap.OpenLive("enp0s8", 1600, true, 100); err != nil {
    panic(err)
} else {
   err = handle.WritePacketData(packet.Data())
}

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

提前致谢!

4

1 回答 1

0

根据文档

包 pcap 允许 gopacket 的用户从网络或 pcap 文件中读取数据包。

要丢弃包裹,您需要能够拦截它们。根据您想要解决此问题的通用程度,您可能需要挂钩到内核。我建议研究 iptables 和 netfilters。

我发现了一些用 go 编写的 VPN,也许看看它们是如何构建的,因为你想做类似的事情(数据包隧道)。

于 2018-05-28T08:59:26.360 回答