From fbdbaf8f956e487536f23bc2f2d5a8a3784fccdd Mon Sep 17 00:00:00 2001 From: lynx Date: Mon, 31 Jul 2023 16:39:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20IP=20=E5=8C=85?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/engine/engine.go | 1 + core/protocol/ip.go | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/core/engine/engine.go b/core/engine/engine.go index fb617d6..5b460d3 100644 --- a/core/engine/engine.go +++ b/core/engine/engine.go @@ -161,6 +161,7 @@ func (e *Engine) Start() error { go e.RoutineTUNReader() go e.RoutineTUNWriter() + go e.RoutineRouteTableWriter() if err := <-e.errChan; err != nil { return err diff --git a/core/protocol/ip.go b/core/protocol/ip.go index a51fdb6..a92cf15 100644 --- a/core/protocol/ip.go +++ b/core/protocol/ip.go @@ -24,8 +24,16 @@ func ParseIP(buff []byte) (IP, error) { func ParseIPv4(buff []byte) (*IPv4, error) { headerLength := (buff[0] & 0xF0) * 5 - src := netip.AddrFrom4([4]byte{buff[12], buff[13], buff[14], buff[15]}) - dst := netip.AddrFrom4([4]byte{buff[16], buff[17], buff[18], buff[19]}) + + src, ok := netip.AddrFromSlice(buff[12:16]) + if !ok || src.IsValid() { + return nil, errors.New("invalid IP packet") + } + + dst, ok := netip.AddrFromSlice(buff[16:20]) + if !ok || dst.IsValid() { + return nil, errors.New("invalid IP packet") + } return &IPv4{ headerLength: int(headerLength),