bplists를 기반으로 합리적으로 성공한 사파리 원격 디버그 프로토콜에 대한 해부학자를 작성하려고합니다 (현재 코드 : https://github.com/andydavies/bplist-dissector).Lua Wireshark Dissector에서 패킷 재구성
나는 패킷을 재구성하는 일이 어렵다.
는 일반적으로 프로토콜은 다음 패킷의 길이에 bplist와 다음 패킷을 포함하는 4 바이트 패킷을 전송한다.불행하게도 일부 패킷을 아이폰 OS 시뮬레이터에서이 대회와 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 바이트 룩업 테이블이 있으므로 패킷을 정확하게 bplists로 연결해야합니다.
다음은 cap 예의 예입니다. http://www.cloudshark.org/captures/2a826ee6045b # 338은 bplist 크기가 데이터의 시작 부분에 있고 데이터에 여러 개의 plist가있는 패킷의 예입니다.
내가이 일을 제대로하고있는 것입니까 (웹에 관한 다른 질문을 찾고 있습니다) 또는 더 좋은 방법이 있습니까?
이렇게 해 주셔서 감사합니다. 어떻게 든 모든 패킷을 디코딩하지 않아서 다른 모양을 가질 필요가 없습니다! –
꽤 오래된 게시물이지만, 미래에는 Wireshark 1.99.2부터 ** tcp_dissect_pdus를위한 ** 루아 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__) –