Próbuję napisać program do protokołu zdalnej debugowania Safari, który jest oparty na listach binarnych i odniósł znaczny sukces (obecny kod jest tutaj: https://github.com/andydavies/bplist-dissector).Ponowne składanie pakietów w urządzeniu Lua Wireshark Dissector
Wpadam jednak w trudność przy ponownym składaniu pakietów.
Normalnie protokół wysyła pakiet z 4 bajtów zawierających długość następnego pakietu, a następnie pakiet z bplist w.
Niestety, niektóre pakiety z symulatora iOS nie wykonuj tej konwencji i cztery bajty są albo oznaczone na przedniej stronie pakietu bplist, albo na końcu poprzedniego pakietu bplist, albo dane są wieloma listami bplist.
Próbowałem ponownym ich użyciem desegment_len
i desegment_offset
następująco:
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)
...
Co ja próbuje zrobić tutaj jest zawsze zmusić rozmiar bajtów za pierwsze cztery bajty pakietu przeznaczonego do rozcięta ale to nie działa nadal widzę pakiet 4 bajty, a następnie pakiet bajtowy x.
Potrafię wymyślić inne sposoby zarządzania dodatkowymi czterema bajtami na froncie, ale protokół zawiera tabelę odnośników, która wynosi 32 bajty od końca pakietu, więc potrzebna jest metoda dokładnego złożenia pakietu w pakiety bplist.
Oto przykładowa czapka: http://www.cloudshark.org/captures/2a826ee6045b # 338 to przykład pakietu, w którym rozmiar bplisty znajduje się na początku danych, aw danych jest wiele plików plist.
Czy robię to dobrze (patrząc na inne pytania na temat SO i przykłady w Internecie, jak się wydaje) lub czy istnieje lepszy sposób?
Dzięki za to pomógł mi dostać się dalej, jakoś nie dekoduję wszystkich pakietów, więc trzeba spojrzeć jeszcze raz! –
Mimo że jest to dość stary post, w przyszłości uważam, że warto napisać, że począwszy od Wireshark 1.99.2, tam ** jest ** API Lua dla 'tcp_dissect_pdus'. Zajrzyj tutaj: [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__) –