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

时间:2018-05-27 09:17:01

标签: go networking tcp udp gopacket

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

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

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

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

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

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

    提前致谢!

1 个答案:

答案 0 :(得分:0)

根据Documentation

  

Package pcap允许gopacket的用户从线路上读取数据包   来自pcap文件。

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

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