Go 如何拾取IP数据包并在不同的VM和接口上注入

Go 如何拾取IP数据包并在不同的VM和接口上注入,go,networking,tcp,udp,gopacket,Go,Networking,Tcp,Udp,Gopacket,我一直试图解决这两个问题,但都没有成功 我想知道是否有可能从带有Gopacket的接口中删除特定的数据包,或者仅仅是为了监听线路?例如,当我将一个UDP数据包发送到一个错误的端口,然后使用Gopacket纠正它时,它将发送两个数据包,一个发送到错误的端口,一个发送到正确的端口。有没有办法用Gopacket丢弃/丢弃错误的数据包 我试图做的是,提取客户端通过IP发送的所有数据包,然后将每个数据包封装为另一个协议X中的有效负载,并发送到远程主机,该主机将在协议X上接收数据,获取有效负载,并在其接口上

我一直试图解决这两个问题,但都没有成功

  • 我想知道是否有可能从带有Gopacket的接口中删除特定的数据包,或者仅仅是为了监听线路?例如,当我将一个UDP数据包发送到一个错误的端口,然后使用Gopacket纠正它时,它将发送两个数据包,一个发送到错误的端口,一个发送到正确的端口。有没有办法用Gopacket丢弃/丢弃错误的数据包

  • 我试图做的是,提取客户端通过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则不可能

    提前谢谢

    根据

    Package pcap允许gopacket的用户从线路上或网络上读取数据包 从pcap文件

    要丢弃包,您需要能够拦截它们。根据解决这个问题的通用性,您可能需要挂接到内核中。我建议研究iptables和netfilter

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