추가하려는 프로토콜 명으로 lua 파일을 생성합니다.
ex. C:\Program Files\Wireshark\hana.lua
init.lua 에 hana.lua 추가
init.lua 파일은 wireshark 프로그램이 시작하면, 실행됩니다.
init.lua 파일 하단에 아래 코드를 추가합니다.
dofile(DATA_DIR.."hana.lua")
DATA_DIR 은 init.lua 파일 경로이며, hana.lua 파일이 다른 경로에 있으면 해당 경로를 적습니다.
init.lua 파일은 관리자 권한으로 실행된 프로그램으로 수정해야 합니다.
아래 내용 참고해서 hana.lua 파일을 수정합니다.
-- hana protocol example
-- declare our protocol
p_hana = Proto("hana", "HANA Protocol")
-- create a function to dissect it
function p_hana.dissector(buf, pinfo, root)
pinfo.cols.protocol = "hana"
i = 0
local st = root:add(p_hana, buf(), "HANA Protocol Data")
-- Message Header
st = st:add(buf(0,32), "Message Header")
st:add(buf(i,8), "Session identifier: " .. buf(i,8))
i = i + 8
st:add(buf(i,4), "Packet sequence number in this session: " .. buf(i,4):le_int())
i = i + 4
st:add(buf(i,4), "Used space in packet: " .. buf(i,4):le_uint())
i = i + 4
st:add(buf(i,4), "Total space in packet: " .. buf(i,4):le_uint())
i = i + 4
st:add(buf(i,2), "Number of segments in packet: " .. buf(i,2):le_int())
i = i + 2
st:add(buf(i,1), "Reserved, do not use: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,9), "Reserved, do not use: " .. buf(i,9))
i = i + 9
-- Request Segment Header
st = st:add(buf(i,24), "Segment Header")
st:add(buf(i,4), "Length of the segment: " .. buf(i,4):le_int())
i = i + 4
st:add(buf(i,4), "Offset of the segment: " .. buf(i,4):le_int())
i = i + 4
part_count = buf(i,2):le_int()
st:add(buf(i,2), "Number of contained parts: " .. buf(i,2):le_int())
i = i + 2
st:add(buf(i,2), "Number of segments: " .. buf(i,2):le_int())
i = i + 2
st:add(buf(i,1), "Segment kind: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,1), "Message type: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,1), "Whether the command is committed: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,1), "Command options: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,8), "Reserved, do not use: " .. buf(i,8))
i = i + 8
for j = 1, part_count, 1 do
-- Part Header
st = st:add(buf(i,16), "Part Header")
part_kind = buf(i,1):uint()
st:add(buf(i,1), "Part kind: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,1), "Further attributes of part: " .. buf(i,1):int())
i = i + 1
st:add(buf(i,2), "Argument count: " .. buf(i,2):le_int())
i = i + 2
st:add(buf(i,4), "Argument count: " .. buf(i,4):le_int())
i = i + 4
part_length = buf(i,4):le_int()
st:add(buf(i,4), "Length of part buffer in bytes: " .. buf(i,4):le_int())
i = i + 4
st:add(buf(i,4), "Length in packet remaining without this part: " .. buf(i,4):le_int())
i = i + 4
if part_kind == 33 then
field_count = buf(i,2):le_uint()
st:add(buf(i,2), "Number of fields: " .. buf(i,2):le_uint())
i = i + 2
for k = 1, field_count, 1 do
-- Field
field_length = buf(i,1):int()
if field_length == 255 then
i = i + 1
field_length = buf(i,1):int()
st:add(buf(i,1), "Length of data: " .. buf(i,1):int())
i = i + 1
else
st:add(buf(i,1), "Length of data: " .. buf(i,1):int())
i = i + 1
end
st:add(buf(i,field_length), "Field data: " .. buf(i,field_length):string())
i = i + field_length
end
else
i = i + part_length
end
if part_length % 8 ~= 0 then
i = i + 8 - (part_length % 8)
end
end
end
-- load the udp.port table
tcp_table = DissectorTable.get("tcp.port")
-- register our protocol to handle tcp port 30015