如何创建用于通过值确定映射中的键的算法?

我使用nf_queue捕获和处理用户空间中的数据包,例如,网络数据包退出,路由为172.16.16.100:60000-> 192.168.22.226:22,我更改了地址和源端口,例如10.0.0.10:60001-> 10.0.0.11:22并使用nat告知地址为10.0.0.11的计算机,有必要在172.16.16.100:60000-> 192.168.22.226:22中重新制作数据包,然后将此条目放在缓存中第一台机器是相似的。答案以10.0.0.11:22->10.0.0.10:60001的形式返回给我,我将其转换为返回地址192.168.22.226:22-> 172.16.16.100:6000,从而从缓存中还原数据包条目。由于有很多客户端,我按源端口将它们分开,然后更改它并从中恢复标头,我的代码太大声且不美观,我开始重写逻辑,我写了如何大致确定密钥传入的数据包,告诉我如何通过响应端口确定必要的密钥。

type key struct {
     bits    uint32
     addr [16]byte
}
func CreateKey(src net.IP, port layers.TCPPort) (k key) {
   k.bits  = uint32(int(port) | ((copy(k.addr[:], src) & 0x10) << 12))
   return
}

func (k key) addrLen() int {
   shifter := (k.bits & 0x10000) >> 15
   return 4 << shifter
}


func (k key) ports()uint32{
   return k.bits & 0xffff
}

func (k key) IP()(net.IP){
   return net.IP(k.addr[:k.addrLen()])
}
var cache = map[key]session
评论