From 974762901731453466591fce4261f7eafb675439 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 10 Mar 2026 21:51:23 +0800 Subject: [PATCH] fix ipPacket --- Tun/Punchnet/Actors/SDLContextActor.swift | 4 +--- Tun/Punchnet/NetworkStack/IPPacket.swift | 20 +++++--------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index d859317..dcf38d5 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -647,12 +647,10 @@ actor SDLContextActor { // 外部出去的数据,需要建立FlowSession // 外部数据进来的时候需要查找 - SDLLogger.shared.log("[SDLContext] flow_session: started", level: .debug) if let flowSession = packet.flowSession() { - //self.flowSessionManager.updateSession(flowSession) + self.flowSessionManager.updateSession(flowSession) SDLLogger.shared.log("[SDLContext] flow_session: \(flowSession)", level: .debug) } - SDLLogger.shared.log("[SDLContext] flow_session: end", level: .debug) // 查找arp缓存中是否有目标mac地址 if let dstMac = self.arpServer.query(ip: dstIp) { diff --git a/Tun/Punchnet/NetworkStack/IPPacket.swift b/Tun/Punchnet/NetworkStack/IPPacket.swift index 3f5e8d1..f5370bb 100644 --- a/Tun/Punchnet/NetworkStack/IPPacket.swift +++ b/Tun/Punchnet/NetworkStack/IPPacket.swift @@ -43,7 +43,7 @@ struct IPHeader { struct IPPacket { let header: IPHeader let data: Data - let transportPacket: TransportPacket? + let transportPacket: TransportPacket enum TransportPacket { case tcp(TCPPacket) @@ -80,14 +80,10 @@ struct IPPacket { ) self.data = data - - let offset = Int(headerLen) - self.transportPacket = Self.parseTransportPacket(proto: data[9], offset: offset, data: data) - - SDLLogger.shared.log("[SDLContext] ipPacket proto \(data[9]), offset: \(offset), ip_data: \(data), data: \(self.transportPacket)", level: .debug) + self.transportPacket = Self.parseTransportPacket(proto: data[9], offset: Int(headerLen), data: data) } - private static func parseTransportPacket(proto: UInt8, offset: Int, data: Data) -> TransportPacket? { + private static func parseTransportPacket(proto: UInt8, offset: Int, data: Data) -> TransportPacket { guard let proto = TransportProtocol(rawValue: proto) else { return .unsupported(proto) } @@ -155,7 +151,6 @@ struct TCPHeader { struct TCPPacket { let header: TCPHeader - let payload: Data init?(_ data: Data, offset: Int) { guard data.count >= offset + 20 else { @@ -193,10 +188,10 @@ struct TCPPacket { guard data.count >= offset + headerLen else { return nil } - + self.header = header - self.payload = data[offset + headerLen..= offset + 8 else { @@ -217,8 +211,6 @@ struct UDPPacket { self.dstPort = UInt16(bytes: (data[offset + 2], data[offset + 3])) self.length = UInt16(bytes: (data[offset + 4], data[offset + 5])) self.checksum = UInt16(bytes: (data[offset + 6], data[offset + 7])) - - self.payload = data[offset + 8..= offset + 4 else { @@ -238,7 +229,6 @@ struct ICMPPacket { self.type = data[offset] self.code = data[offset + 1] self.checksum = UInt16(bytes: (data[offset + 2], data[offset + 3])) - self.payload = data[offset + 4..