Tôi đang cố gắng để viết một người mổ xẻ cho giao thức gỡ lỗi từ xa Safari mà là dựa trên bplists và đã thành công một cách hợp lý (mã hiện tại là ở đây: https://github.com/andydavies/bplist-dissector).gói reassembling trong một Lua Wireshark mổ xẻ
Tôi đang gặp khó khăn với việc tập hợp lại các gói mặc dù.
Thông thường các giao thức gửi một gói tin với 4 byte chứa chiều dài của gói tin tiếp theo, sau đó các gói tin với bplist trong.
Đáng tiếc là một số gói tin từ trình giả lập iOS không tuân theo quy ước này và bốn byte hoặc được gắn thẻ vào mặt trước của gói bplist, hoặc vào cuối của gói bplist trước đó, hoặc dữ liệu là nhiều bplists.
tôi đã cố gắng ghép chúng lại sử dụng desegment_len
và desegment_offset
như sau:
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)
...
Những gì tôi đang cố gắng làm ở đây là luôn luôn buộc các byte kích thước là bốn byte đầu tiên của một gói tin được mổ xẻ nhưng nó không hoạt động, tôi vẫn thấy gói 4 byte, tiếp theo là gói byte x.
Tôi có thể nghĩ ra các cách khác để quản lý thêm bốn byte ở phía trước, nhưng giao thức có chứa bảng tra cứu 32 byte từ cuối gói nên cần có cách ghép chính xác gói vào bplists.
Dưới đây là giới thiệu ví dụ: http://www.cloudshark.org/captures/2a826ee6045b # 338 là ví dụ về gói có kích thước bplist ở đầu dữ liệu và có nhiều dấu trong dữ liệu.
Tôi có làm đúng này (nhìn câu hỏi khác về SO, và các ví dụ trên web tôi dường như được) hoặc là có một cách tốt hơn?
Cảm ơn vì điều này đã giúp tôi tiếp tục, bằng cách nào đó tôi không giải mã tất cả các gói vì vậy cần phải xem xét lại! –
Mặc dù đây là một bài đăng khá cũ, nhưng trong tương lai, tôi nghĩ rằng nó đáng để nói rằng bắt đầu từ Wireshark 1.99.2, ở đó ** là ** API Lua cho 'tcp_dissect_pdus'. Có một cái nhìn ở đây: [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__) –