bplistsに基づいており、かなり成功しているSafariリモートデバッグプロトコル用のディセクタを作成しようとしています(現在のコードはhttps://github.com/andydavies/bplist-dissectorにあります)。
しかし、私はパケットを再組み立てするのに苦労しています。
通常、プロトコルは次のパケットの長さを含む4バイトのパケットを送信し、次にbplistを含むパケットを送信します。
残念ながら、iOSシミュレータからの一部のパケットはこの規則に従わず、4バイトがbplistパケットの先頭、または前のbplistパケットの末尾にタグ付けされているか、データが複数のbplistです。
次のように使用desegment_len
して、それらを再組み立てしてみました。desegment_offset
function p_bplist.dissector(buf, pkt, root)
-- length of data packet
local dataPacketLength = tonumber(buf(0, 4):uint())
local desiredPacketLength = dataPacketLength + 4
-- if not enough data indicate how much more we need
if desiredPacketLen > buf:len() then
pkt.desegment_len = dataPacketLength
pkt.desegment_offset = 0
return
end
-- have more than needed so set offset for next dissection
if buf:len() > desiredPacketLength then
pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT
pkt.desegment_offset = desiredPacketLength
end
-- copy data needed
buffer = buf:range(4, dataPacketLen)
...
私がここでやろうとしているのは、常にサイズバイトをパケットの最初の4バイトに強制的に分析することですが、それでも機能しません。4バイトのパケットの後にxバイトのパケットが続きます。
前面の余分な4バイトを管理する他の方法を考えることもできますが、プロトコルにはパケットの終わりから32バイトのルックアップテーブルが含まれているため、パケットをbplistに正確に接続する方法が必要です。
キャップの例を次に示します。http : //www.cloudshark.org/captures/2a826ee6045b#338は、bplistサイズがデータの先頭にあり、データに複数のplistがあるパケットの例です。
私はこれを正しく行っていますか(SOに関する他の質問、および私がそうであるように見えるWebの周りの例を見て)、またはより良い方法がありますか?