簡體   English   中英

iOS網絡擴展包解析

[英]iOS network extension packet parsing

我正在開發一個 VPN(iOS 網絡擴展),並使用 C/C++ 直接讀取文件描述符(而不是 Swift),目前它成功捕獲設備的請求數據包,但我不知道如何解析 iOS 的數據包,我可以甚至找不到數據包的格式是什么網絡層或協議。

我將 Packet 的二進制文件轉換為 Hex,以便能夠使用在線工具進行解碼; 以下是我需要解析的示例:

000000024500003B5461000040110C390A07000208080808FA2D0035002739B4DE790100000100000000000003777777056170706C6503636F6D0000010001

000000024500003CBAE200004011A5B60A07000208080808E48A0035002892DAE43B01000001000000000000037777770669636C6F756403636F6D0000010001

00000002450000375324000040110D7A0A07000208080808DD7F003500232BBA841801000001000000000000056170706C6503636F6D0000010001

但是當嘗試使用在線解碼器解析時,他們無法說無效數據包。

上面是什么網絡層或協議?

請注意,上面是 3 個數據包樣本(不是我拆分的一個)。

它是帶有4個字節前綴的tun層協議:

1. 一旦我們使用 C/C++ 讀取文件描述符,在NEPacketTunnelProvider如:

let tunFd = self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32

// ... pass above to C/C++ backend

而不是像這樣使用Swift

self.packetFlow.readPackets { [weak self] (packets: [Data], protocols: [NSNumber]) in
    // Handle packets here...
}

2. tun-layer數據包前有4附加字節(例如00 00 00 02 )。

3.為了讓大多數在線工具理解數據包,刪除那些開始的4個字節,並用 Mac-Header-Hex 作為前綴,如:

01 00 5E 00 00 09 C2 01 17 23 00 00 08 00

請注意,上面將數據轉換為tap層數據包。

此外,一旦將數據包寫入文件描述符(刪除 Mac-Header 后),請記住再次為這4個字節添加前綴。


2021 年更新; Apple 不鼓勵直接訪問文件描述符(並且可能會在未來的 iOS 版本中刪除)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM