From 7013bd61f131cee123ff4b27510024e88ee658ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=B9=BF?= Date: Thu, 3 Jul 2025 18:34:10 +0800 Subject: [PATCH] =?UTF-8?q?"feat(forwarder):=20=E4=BF=AE=E6=94=B9=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E8=A7=84=E5=88=99=E5=8C=B9=E9=85=8D=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=9F=BA=E4=BA=8E=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E8=BF=9B=E8=A1=8C=E6=98=A0=E5=B0=84"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- forwarder.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/forwarder.go b/forwarder.go index a9f6705..72433bd 100644 --- a/forwarder.go +++ b/forwarder.go @@ -87,23 +87,24 @@ func (f *Forwarder) ForwardPacket(ipLayer *layers.IPv4, transportLayer gopacket. // 获取源IP和端口 srcIP := ipLayer.SrcIP.String() - var srcPort int + var srcPort, dstPort int // 根据传输层协议获取端口 switch t := transportLayer.(type) { case *layers.TCP: srcPort = int(t.SrcPort) - // dstPort = int(t.DstPort) + dstPort = int(t.DstPort) case *layers.UDP: srcPort = int(t.SrcPort) - // dstPort = int(t.DstPort) + dstPort = int(t.DstPort) default: // 不支持的传输层协议 return nil } - // 查找转发规则 - key := fmt.Sprintf("%s:%d", srcIP, srcPort) + // 查找转发规则, 按照目标端口查找并转发。 + // 相当于做了一个端口映射。 + key := fmt.Sprintf(":%d", dstPort) // srcIP, srcPort) if forwardAddr, exists := f.natTable[key]; exists { // 解析转发目标地址 addr, port, err := net.SplitHostPort(forwardAddr)