我目前正在开发一个基于Go的路由器,用于教育目的。
在尝试序列化我从主机转发的ICMP数据包时,gopacket.ICMPv4结构的.SerializeTo函数似乎正在剥离ICMP有效负载部分,并且仅在返回到缓冲区的字节数组中包含类型、代码、校验和、id和序列。
下面是我用来将eth、ip和icmp层从WAN接口发送出去的代码。在从LAN接口收到这些层之后,我对这些层所做的唯一更改是ICMP ID、以太网src/dst和IP src。
在我发送它之前,ICMP层显示它有一个有效负载部分:
icmpLayer =&{BaseLayer:{内容:8 0 65 238 7 109 0 1负载:122 238 50 94 15 84 7 0 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 36 37 38 39 40 41 43 44 45 46 47 49 50 51 52 53 54 55} TypeCode:回显请求校验和:53486 Id:10000 Seq:1}
向服务器发送ICMP请求的客户端的PCAP LAN端。
服务器的PCAP WAN端将请求转发到目标。
如果有任何额外的信息需要,请让我知道,我试图提供尽可能多的上下文。