同步操作将从 THEWON/lua-engine 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
-- [[ uncomment it to disable this module ]]---- do return endg_mbtcp = Proto("ModbusTCP", "Modbus TCP")print("Script ModbusTCP", NotWireshark)function tableContains(tbl, key)if tbl == nil thenreturn falseendfor k, v in pairs(tbl) doif k == key thenreturn trueendendreturn falseend-- g_mbtcp.enable = falselocal functions_code = {[1] = "Read Coils",[2] = "Read Discrete Inputs",[3] = "Read Holding Registers",[4] = "Read Input Registers",[5] = "Write Single Coil",[6] = "Write Holding Register",[0x0F] = "Write (N) Coils",[0x10] = "Write (N) Holding Registers",[0x81] = "Read Coils error",[0x82] = "Read Discrete Inputs error",[0x83] = "Read Holding Registers error",[0x84] = "Read Input Registers error",[0x85] = "Write Single Coil error",[0x86] = "Write Holding Register error",[0x8F] = "Write (N) Coils error",[0x90] = "Write (N) Holding Registers error",}local exception_code = {[1] = "Illegal function",[2] = "Illegal address",[3] = "Illegal data",[4] = "Slave device failure",[5] = "Ack",[6] = "Slave device busy",[8] = "Checksum error",[0xA] = "Gateway unavailable",[0XB] = "Gateway response failure"}local coils_code = {[0] = "Off",[0x00FF] = "On",[0xFF00] = "On"}-- define protocol fields-- local f1 = ProtoField.new("mbtcp.BOOLEAN", "BOOLEAN", ftypes.BOOLEAN)-- local pf_bool = ProtoField.bool("mbtcp.BOOLEAN", "BOOLEAN", base.NONE)--, base.HEX, {'True', 'False'}, 0xF0, 'blob?')local pf_transId = ProtoField.uint16("mbtcp.TransactionId", "Transaction Identifier")local pf_protoId = ProtoField.uint16("mbtcp.ProtocolId", "Protocol Identifier")local pf_len = ProtoField.uint16("mbtcp.Length", "Length")local pf_unitId = ProtoField.uint8("mbtcp.UnitId", "Unit Identifier")local pf_fcode = ProtoField.uint8("mbtcp.Function", "Function", base.HEX, functions_code)local pf_size = ProtoField.uint8("mbtcp.Size", "Size")local pf_err = ProtoField.uint8("mbtcp.ErrCode", "ErrCode", base.HEX, exception_code)local pf_addr = ProtoField.uint16("mbtcp.RegAddr", "Address")local pf_cnt = ProtoField.uint16("mbtcp.RegCount", "Count")local pf_Wcnt = ProtoField.uint16("mbtcp.WordCount", "Word Count")local pf_Bcnt = ProtoField.uint8("mbtcp.ByteCount", "Byte Count")local pf_bcnt = ProtoField.uint16("mbtcp.BitCount", "Bit Count")local pf_reg = ProtoField.uint16("mbtcp.RegValue", "RegValue", base.HEX)local pf_crc = ProtoField.uint16("mbtcp.Crc16", "Crc16", base.HEX)local pf_bits = ProtoField.uint8("mbtcp.Bits", "Bits", base.HEX)local pf_coil = ProtoField.uint8("mbtcp.Coils", "Coils", base.HEX, coils_code)g_mbtcp.fields = {pf_transId, pf_protoId, pf_len, pf_unitId,pf_id, pf_fcode, pf_size, pf_err,pf_addr, pf_cnt, pf_Wcnt, pf_Bcnt, pf_bcnt, pf_reg, pf_crc,pf_bits, pf_coil}-- define dissector function (Tvb, Pinfo, TreeItem)function g_mbtcp.dissector(buf, pkt, tree)local pktlen = buf:reported_length_remaining()if pktlen < 8 thenreturn 0endlocal length = buf:range(4, 2):uint()if length + 6 ~= pktlen thenreturn 0endlocal fcode = buf(7, 1):uint()if not tableContains(functions_code, fcode) thenreturn 0endlocal subtree = tree:add(g_mbtcp, buf:range(0, pktlen))subtree:add(pf_transId, buf:range(0, 2))subtree:add(pf_protoId, buf:range(2, 2))subtree:add(pf_len, buf:range(4, 2))subtree:add(pf_unitId, buf:range(6, 1))if (fcode & 0x80) == 0x80 thenif pktlen == 5 thenlocal subtree = tree:add(g_mbtcp, buf:range(0, pktlen))subtree:add(pf_id, buf:range(0, 1))subtree:add(pf_fcode, buf:range(1, 1))subtree:add(pf_err, buf:range(2, 1))subtree:add(pf_crc, crc)elsereturn 0endelseif fcode == 1 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_bcnt, buf:range(10, 2))endlocal cnt = buf:range(8, 1):uint()if (cnt + 9) == pktlen thenlocal subtree = tree:add(g_mbtcp, buf:range(0, pktlen))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_Bcnt, buf:range(8, 1))local off = 9repeatsubtree:add(pf_bits, buf:range(off, 1))off = off + 1cnt = cnt - 1until cnt == 0endelseif fcode == 2 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_bcnt, buf:range(10, 2))endlocal cnt = buf:range(8, 1):uint()if (cnt + 9) == pktlen thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_Bcnt, buf:range(8, 1))local off = 9repeatsubtree:add(pf_bits, buf:range(off, 1))off = off + 1cnt = cnt - 1until cnt == 0endelseif fcode == 3 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_Wcnt, buf:range(10, 2))elselocal cnt = buf:range(8, 1):uint()if (cnt % 2) == 1 thenreturn 0endif (cnt + 9) == pktlen thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_Bcnt, buf:range(8, 1))local off = 9repeatsubtree:add(pf_reg, buf:range(off, 2))off = off + 2cnt = cnt - 2until cnt == 0elsereturn 0endendelseif fcode == 4 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_Wcnt, buf:range(10, 2))elselocal cnt = buf:range(8, 1):uint()if (cnt % 2) == 1 thenreturn 0endif (cnt + 9) == pktlen thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_Bcnt, buf:range(8, 1))local off = 9repeatsubtree:add(pf_reg, buf:range(off, 2))off = off + 2cnt = cnt - 2until cnt == 0elsereturn 0endendelseif fcode == 5 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_coil, buf:range(10, 2))subtree = tree:add(g_mbtcp, buf:range(0, pktlen))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_coil, buf:range(10, 2))elsereturn 0endelseif fcode == 6 thenif pktlen == 8 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_reg, buf:range(10, 2))subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_addr, buf:range(8, 2))subtree:add(pf_reg, buf:range(10, 2))elsereturn 0endelseif fcode == 0x0F thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_addr, buf:range(8, 2)):append_text(" <Start>")subtree:add(pf_bcnt, buf:range(10, 2))elseif pktlen >= 14 thenlocal cnt = buf:range(10, 2):uint()if (cnt + 12) == pktlen thenlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2)):append_text(" <Start>")subtree:add(pf_bcnt, buf:range(10, 2))subtree:add(pf_Bcnt, buf:range(12, 1))local off = 13repeatsubtree:add(pf_bits, buf:range(off, 1))off = off + 1cnt = cnt - 1until cnt == 0elsereturn 0endelsereturn 0endelseif fcode == 0x10 thenif pktlen == 12 thenlocal subtree = tree:add(g_mbtcp, buf:range(7, 5))subtree:add(pf_fcode, buf:range(7, 1)):append_text(" <Respond>")subtree:add(pf_addr, buf:range(8, 2)):append_text(" <Start>")subtree:add(pf_Wcnt, buf:range(10, 2))elseif pktlen >= 17 thenlocal Wcnt = buf:range(10, 2):uint()local Bcnt = buf:range(12, 1):uint()if (Wcnt * 2) ~= Bcnt thenreturn 0endif (Bcnt + 13) ~= pktlen thenreturn 0endlocal subtree = tree:add(g_mbtcp, buf:range(7, pktlen-7))subtree:add(pf_fcode, buf:range(7, 1))subtree:add(pf_addr, buf:range(8, 2)):append_text(" <Start>")subtree:add(pf_Wcnt, buf:range(10, 2))subtree:add(pf_Bcnt, buf:range(12, 1))local off = 13repeatsubtree:add(pf_reg, buf:range(off, 2))off = off + 2cnt = cnt - 2until cnt == 0elsereturn 0 -- unknownendendprint("Script ModbusTCP dissector exit")endif NotWireshark == nil thenlocal udp_encap_table = DissectorTable.get("tcp.port")udp_encap_table:add(502, p_smsProto)endprint("Script ModbusTCP exit")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。