|
|
|
@@ -1,3 +1,5 @@
|
|
|
|
|
-- COPY to: /usr/lib/x86_64-linux-gnu/wireshark/plugins/spit.lua
|
|
|
|
|
|
|
|
|
|
-- LiveShowSoftware SPIT-Protocol
|
|
|
|
|
spit_proto = Proto("spit", "LiveShowSoftware SPIT")
|
|
|
|
|
spit_sad_proto = Proto("spit_sad", "LiveShowSoftware SPIT SAD")
|
|
|
|
@@ -9,7 +11,7 @@ local f_hLen = ProtoField.uint32("spit.len", "Length")
|
|
|
|
|
local f_hSerId = ProtoField.string("spit.serverId", "ServerID")
|
|
|
|
|
local f_hCliId = ProtoField.string("spit.clientId", "ClientID")
|
|
|
|
|
local f_hType = ProtoField.uint8("spit.msgType", "MsgType")
|
|
|
|
|
local f_pLen = ProtoField.uint32("spit.paylen", "Length")
|
|
|
|
|
local f_pLen = ProtoField.uint32("spit.paylen", "Payload Length")
|
|
|
|
|
|
|
|
|
|
local f_pSession = ProtoField.string("spit.key", "Spit Session")
|
|
|
|
|
local f_pKey = ProtoField.string("spit.key", "Spit Key")
|
|
|
|
@@ -94,6 +96,17 @@ function extractVersionString(buffer)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function addBigEndianValue(tree, proto, buffer)
|
|
|
|
|
local val = -1;
|
|
|
|
|
-- local val = buffer(99,4):le_uint()
|
|
|
|
|
if proto.type == ftypes.UINT32 then
|
|
|
|
|
val = buffer:le_uint()
|
|
|
|
|
elseif proto.type == ftypes.UINT64 then
|
|
|
|
|
val = buffer:le_uint64()
|
|
|
|
|
end
|
|
|
|
|
tree:add(proto, buffer):set_text(proto.name .. ": " .. val)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Heuristic dissector function
|
|
|
|
|
function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
if buffer:len() < 6 then return false end
|
|
|
|
@@ -114,8 +127,9 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
hTree:add(f_hType, buffer(98,1))
|
|
|
|
|
|
|
|
|
|
local pTree = subtree:add("Payload")
|
|
|
|
|
local pLen = buffer(99,4):le_uint()
|
|
|
|
|
pTree:add(f_pLen, buffer(99,4)):set_text("Pyload Length: " .. pLen)
|
|
|
|
|
-- local pLen = buffer(99,4):le_uint()
|
|
|
|
|
-- pTree:add(f_pLen, buffer(99,4)):set_text("Pyload Length: " .. pLen)
|
|
|
|
|
addBigEndianValue(pTree, f_pLen, buffer(99,4))
|
|
|
|
|
|
|
|
|
|
local info_text = "Type: " .. type
|
|
|
|
|
if type == 1 then -- Connect
|
|
|
|
@@ -166,7 +180,7 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
|
|
|
|
|
pTree:add(f_pProjectId, buffer(103,41))
|
|
|
|
|
pTree:add(f_pProjectName, buffer(144,64))
|
|
|
|
|
pTree:add(f_pFramesPerSec, buffer(208,4))
|
|
|
|
|
addBigEndianValue(pTree, f_pFramesPerSec, buffer(208,4))
|
|
|
|
|
info_text = string.format("%s -> %s | Report Project | Project: %s / %s",
|
|
|
|
|
sessionInfos[tostring(pinfo.src)], sessionInfos[tostring(pinfo.dst)], buffer(103,41):string(), buffer(144,64):string())
|
|
|
|
|
|
|
|
|
@@ -202,8 +216,8 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
pTree:add(f_pProjIndep, buffer(147,1))
|
|
|
|
|
pTree:add(f_pTypeGroupName, buffer(148,39))
|
|
|
|
|
pTree:add(f_pTypeName, buffer(187,64))
|
|
|
|
|
pTree:add(f_pDelay, buffer(251,8))
|
|
|
|
|
pTree:add(f_pDuration, buffer(259,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pDelay, buffer(251,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pDuration, buffer(259,8))
|
|
|
|
|
|
|
|
|
|
local group = buffer(148,39):string()
|
|
|
|
|
local name = buffer(187,64):string()
|
|
|
|
@@ -226,17 +240,16 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
pTree:add(f_pObjectName, buffer(147,64))
|
|
|
|
|
pTree:add(f_pTypeId, buffer(211,41))
|
|
|
|
|
pTree:add(f_pSrvParam, buffer(252,64))
|
|
|
|
|
pTree:add(f_pFrameStart, buffer(316,8))
|
|
|
|
|
pTree:add(f_pFrameLength, buffer(324,8))
|
|
|
|
|
pTree:add(f_pFrameFadeIn, buffer(332,8))
|
|
|
|
|
pTree:add(f_pFrameFadeOut, buffer(340,8))
|
|
|
|
|
local valueFactor = buffer(348,4):le_uint()
|
|
|
|
|
pTree:add(f_pValueFactor, buffer(348,4)):set_text("Value Factor" .. valueFactor)
|
|
|
|
|
addBigEndianValue(pTree, f_pFrameStart, buffer(316,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pFrameLength, buffer(324,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pFrameFadeIn, buffer(332,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pFrameFadeOut, buffer(340,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pValueFactor, buffer(348,4))
|
|
|
|
|
pTree:add(f_pValueUse, buffer(349,1))
|
|
|
|
|
pTree:add(f_pTrack, buffer(350,4))
|
|
|
|
|
addBigEndianValue(pTree, f_pTrack, buffer(350,4))
|
|
|
|
|
pTree:add(f_pRemark, buffer(354,64))
|
|
|
|
|
pTree:add(f_pDelay, buffer(418,8))
|
|
|
|
|
pTree:add(f_pDuration, buffer(426,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pDelay, buffer(418,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pDuration, buffer(426,8))
|
|
|
|
|
pTree:add(f_pAssigned, buffer(435,1))
|
|
|
|
|
|
|
|
|
|
local name = buffer(147,64):string()
|
|
|
|
@@ -257,17 +270,16 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
pTree:add(f_pPlayerName, buffer(144,64))
|
|
|
|
|
pTree:add(f_pPlayerType, buffer(208,1))
|
|
|
|
|
pTree:add(f_pPlayerRunning, buffer(209,1))
|
|
|
|
|
pTree:add(f_pPlayerFrames, buffer(210,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pPlayerFrames, buffer(210,8))
|
|
|
|
|
info_text = string.format("Play SPIT Start")
|
|
|
|
|
|
|
|
|
|
elseif type == 38 then -- Play Spit object
|
|
|
|
|
pTree:add(f_pSession, extractSession(buffer, pinfo))
|
|
|
|
|
|
|
|
|
|
pTree:add(f_pPlayerId, buffer(103,41))
|
|
|
|
|
pTree:add(f_pObjectId, buffer(144,41))
|
|
|
|
|
pTree:add(f_pObjectsFrames, buffer(185,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pObjectsFrames, buffer(185,8))
|
|
|
|
|
pTree:add(f_pPlayerPrePos, buffer(193,1))
|
|
|
|
|
pTree:add(f_pValue, buffer(194,4))
|
|
|
|
|
addBigEndianValue(pTree, f_pValue, buffer(194,4))
|
|
|
|
|
pTree:add(f_pValueFlag, buffer(198,1))
|
|
|
|
|
|
|
|
|
|
local oId = buffer(144,41):string()
|
|
|
|
@@ -281,10 +293,9 @@ function spit_proto.dissector(buffer, pinfo, tree)
|
|
|
|
|
|
|
|
|
|
elseif type == 40 then
|
|
|
|
|
pTree:add(f_pSession, extractSession(buffer, pinfo))
|
|
|
|
|
|
|
|
|
|
pTree:add(f_pObjectId, buffer(103,41))
|
|
|
|
|
pTree:add(f_pObjectsFrames, buffer(144,8))
|
|
|
|
|
pTree:add(f_pValue, buffer(152,4))
|
|
|
|
|
addBigEndianValue(pTree, f_pObjectsFrames, buffer(144,8))
|
|
|
|
|
addBigEndianValue(pTree, f_pValue, buffer(152,4))
|
|
|
|
|
info_text = string.format("Report Play Status")
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
@@ -348,15 +359,3 @@ spit_proto:register_heuristic("udp", spit_proto.dissector)
|
|
|
|
|
|
|
|
|
|
spit_sad_proto:register_heuristic("udp", spit_sad_proto.dissector)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- local f_pFramesPerSec = ProtoField.uint32("spit.framesPerSec", "Frames per second")
|
|
|
|
|
-- local f_pTrack = ProtoField.uint32("spit.track", "Track")
|
|
|
|
|
-- local f_pObjectsFrames = ProtoField.uint64("spit.ObjectFrames", "Object Frames")
|
|
|
|
|
-- local f_pValue = ProtoField.uint64("spit.Value", "Value")
|
|
|
|
|
-- local f_pFrameStart = ProtoField.uint64("spit.frameStart", "Frame Start")
|
|
|
|
|
-- local f_pFrameLength = ProtoField.uint64("spit.frameLength", "Frame Length")
|
|
|
|
|
-- local f_pFrameFadeIn = ProtoField.uint64("spit.fadeInLength", "Fade In Length")
|
|
|
|
|
-- local f_pFrameFadeOut = ProtoField.uint64("spit.fadeOutLength", "Fade Out Length")
|
|
|
|
|
-- local f_pDelay = ProtoField.uint64("spit.delay", "Delay")
|
|
|
|
|
-- local f_pDuration = ProtoField.uint64("spit.duration", "Duration")
|
|
|
|
|
-- local f_pPlayerFrames = ProtoField.uint64("spit.PlayerFrame", "Player Frames")
|
|
|
|
|