bplistsに基づいており、合理的に成功したSafariリモートデバッグプロトコル用のディセクタを作成しようとしています(現在のコードはhttps://github.com/andydavies/bplist-dissectorです)。Lua Wireshark Dissectorでパケットを再組み立てする
私はパケットを再組み立てするのが難しいです。
通常プロトコルは、中bplistの持つパケット、その後、次のパケットの長さを含む4バイトのパケットを送信します。
あいにくの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バイトにsizeバイトを強制的に常にありますしかしそれは私がまだxバイトパケットの後に続く4バイトパケットを見ることを働かせません。
余分な4バイトを前面に管理する他の方法も考えられますが、プロトコルにはパケットの最後から32バイトのルックアップテーブルが含まれているため、パケットを正確にスプライスにスプライスする必要があります。
キャップの例を次に示します。http://www.cloudshark.org/captures/2a826ee6045b#338は、bplistサイズがデータの先頭にあり、データに複数のplistがあるパケットの例です。
私はこの権利を守っていますか(それについての他の質問やウェブ上の例を見ています)、より良い方法がありますか?
これをお寄せいただきありがとうございます。何とか私はすべてのパケットをデコードしていないので、もう一度見てください! –
かなり古い投稿ですが、将来的には、Wireshark 1.99.2から始まって**、 'tcp_dissect_pdus'のための** Lua APIがあります。ここで見てください:[wireshark.org/docs](https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html#lua_fn_dissect_tcp_pdus_tvb__tree__size__func__func___desegment__) –