lua在wireshark中的应用,求助
lua吧
全部回复
仅看楼主
level 2
roundsky123 楼主
最近用wireshark抓包时遇到问题,报文被我插入了一段信息,然后我想自己用lua写个脚本,在wireshark里编译成功了,但是还是解析不了我的报文,也不知道在哪里可以调试,有没有有开发lua脚本经验的大神啊,想详细的问问。
2016年08月25日 12点08分 1
level 2
roundsky123 楼主
do
--协议名称为test,在Packet Details窗格显示为yoursunny.P2008.IS409 test
local p_test = Proto("test","test protocol")
--协议的各个字段
local f_vxlan = ProtoField.bytes("test.vxlan","vxlan")
local f_type = ProtoField.uint8("test.type","type",base.DEC)
local f_msg_len = ProtoField.uint8("test.msglen","Message Length",base.DEC)
local f_msg_content = ProtoField.string("test.msgcontent", "Message Content", base.NONE)
local f_stop = ProtoField.uint8("test.stop","stop",base.HEX)
p_test.fields = { f_vxlan, f_type, f_msg_len, f_msg_content, f_stop }
local data_dis = Dissector.get("data")
local function test_dissector(buf,pkt,root)
local buf_len = buf:len()
--先检查报文长度,太短的不是
--取得前8字节vxlan字段的值
local v_vxlan = buf(0,8)
if ((buf(0,1):uint()~=8) or (buf(1,1):uint()~=25) or (buf(2,1):uint()~=0)
or (buf(3,1):uint()~=0) or (buf(4,1):uint()~=0) or (buf(5,1):uint()~=0)
or (buf(6,1):uint()~=20) or (buf(7,1):uint()~=0) )
--不正确就不是我的协议
then
return false
end
--取得type的值
local v_type = buf(8,1)
local i_type = v_type:uint()
--验证type是否正确
if (buf(8,1):uint()~= 0)
then
return false
end
--现在知道是我的协议了,放心大胆添加Packet Details
local t = root:add(p_test,buf)
--在Packet List窗格的Protocol列也可以“做个小广告”
pkt.cols.protocol = "test"
t:add(f_vxlan,v_vxlan)
t:add(f_type,v_type)
local v_msg_len = buf(9,1)
local i_msg_len = v_msg_len:uint()
if (i_msg_len == 3) then
local v_msg_content = buf(10,1)
t:add(f_msg_content,v_msg_content)
local v_stop = buf(11,1)
t:add(f_stop,v_stop)
elseif (i_msg_len == 4) then
local v_msg_content = buf(10,2)
t:add(f_msg_content,v_msg_content)
local v_stop = buf(12,1)
t:add(f_stop,v_stop)
elseif (i_msg_len == 5) then
local v_msg_content = buf(10,3)
t:add(f_msg_content,v_msg_content)
local v_stop = buf(13,1)
t:add(f_stop,v_stop)
elseif (i_msg_len == 6) then
local v_msg_content = buf(10,4)
t:add(f_msg_content,v_msg_content)
local v_stop = buf(14,1)
t:add(f_stop,v_stop)
elseif (i_msg_len == 7) then
local v_msg_content = buf(10,5)
t:add(f_msg_content,v_msg_content)
local v_stop = buf(15,1)
t:add(f_stop,v_stop)
end
return true
end
function p_test.dissector(buf,pkt,root)
if test_dissector(buf,pkt,root) then
--valid test diagram
else
--当发现不是我的协议时,就应该调用data
data_dis:call(buf,pkt,root)
end
end
end
2016年08月25日 12点08分 2
level 11
没试过wireshark的lua插件编程 不过我看了一下网络上的例子
local f_msg_len = ProtoField.uint8("test.msglen","Message Length",base.DEC)
别人在声明这个msglen的时候貌似用的是uint32
虽然貌似区别不大,不过你试试os.execute这个函数是否还可以使用,以及io功能,如果io功能还保留的话你可以使用io输出来调试。使用debug 检查你在协议检查时是否出错
2016年08月28日 11点08分 4
1