MacOS 网络扩展失败

MacOS Network Extension Failing

提问人:narner 提问时间:11/17/2023 更新时间:11/17/2023 访问量:23

问:

我有一个 MacOS Swift 应用程序,它使用网络扩展通过 TunnelKit 使用 WireGuard 连接到 VPN。

我在这里添加了几个日志,但只能看到“启动隧道”正在发生;即使 VPN 已连接。

    import Foundation
    import NetworkExtension
    import TunnelKitWireGuardAppExtension
    
    class PacketTunnelProvider: WireGuardTunnelProvider {
    
        private var totalRXBytes: Int = 0
        private var totalTXBytes: Int = 0
        private let sharedDefaults = UserDefaults(suiteName: "com.co.AppGroup")
    
        override init() {
            super.init()
            setupUserDefaults()
            capturePacketFlowData()
        }
    
        override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
            logMessage("START TUNNEL")
            super.startTunnel(options: options, completionHandler: completionHandler)
        }
    
        private func setupUserDefaults() {
            sharedDefaults?.set(0, forKey: "TotalRXBytes")
            sharedDefaults?.set(0, forKey: "TotalTXBytes")
            sharedDefaults?.synchronize()
            logMessage("User defaults setup completed")
        }
    
        private func capturePacketFlowData() {
            logMessage("Attempting to capture packet flow data")
            packetFlow.readPackets { [weak self] packets, protocols in
                guard let strongSelf = self else {
                    self?.logMessage("Failed to capture packet flow data: self is nil")
                    return
                }
                strongSelf.logMessage("Packets captured: \(packets.count)")
                strongSelf.processPackets(packets, isOutgoing: false)
                strongSelf.sendOutgoingPackets(packets, protocols: protocols)
                strongSelf.capturePacketFlowData() // Continue capturing packets
            }
        }
    
        private func processPackets(_ packets: [Data], isOutgoing: Bool) {
            for packet in packets {
                if isOutgoing {
                    totalTXBytes += packet.count
                    logMessage("Processed outgoing packet. Size: \(packet.count) bytes. Total TX: \(totalTXBytes) bytes")
                    updateUserDefaults(for: "TotalTXBytes", with: totalTXBytes)
                } else {
                    totalRXBytes += packet.count
                    logMessage("Processed incoming packet. Size: \(packet.count) bytes. Total RX: \(totalRXBytes) bytes")
                    updateUserDefaults(for: "TotalRXBytes", with: totalRXBytes)
                }
            }
        }
    
        func sendOutgoingPackets(_ packets: [Data], protocols: [NSNumber]) {
            logMessage("Sending \(packets.count) outgoing packets")
            processPackets(packets, isOutgoing: true)
            packetFlow.writePackets(packets, withProtocols: protocols)
        }
    
        private func updateUserDefaults(for key: String, with value: Int) {
            sharedDefaults?.set(value, forKey: key)
            sharedDefaults?.synchronize()
            logMessage("Updated UserDefaults for key: \(key) with value: \(value)")
        }
    
        private func logMessage(_ message: String) {
            NSLog("🚀🚀🚀🚀🚀 \(message)")
        }
    
        func sizeInMB(data: Data) -> String {
            let bytes = Double(data.count)
            let megabytes = bytes / (1024 * 1024)
            return String(format: "%.2f MB", megabytes)
        }
    
    }
Swift macOS VPN 网络扩展 WireGuard

评论


答: 暂无答案