2011-05-13 64 views
2


我有一个客户端服务器协议,其工作原理如下。
客户端发送带有服务器id的udp广播(到固定端口)。
服务器收到数据报,如果它与他的ID相匹配,他会向客户端发送他正在收听的端口。
然后客户端打开到该端口的tcp连接。
我正在写这个东西的Lua的Wireshark解剖器,我需要动态地设置tcp连接的端口(我事先不知道巫婆端口服务器侦听)。

我想类似的东西:在lua中写一个wireshark解剖器并将其设置在一个动态端口上

-- declare our protocol 
myproto_udp_proto = Proto("myproto_UDP","myproto UDP Protocol") 
myproto_tcp_proto = Proto("myproto_TCP","myproto TCP Protocol") 
-- create a function to dissect it 
function myproto_tcp_proto.dissector(buffer,pinfo,tree) 
     pinfo.cols.protocol = "myproto TCP" 
     local subtree = tree:add(myproto_tcp_proto,buffer(),"myproto TCP Protocol Data") 
     if buffer(0,2):uint() == 0xF00D then 
      subtree:add(buffer(0,2),"Magic(F00D)") 
     else 
      subtree:add(buffer(0,2),"Bad Magic") 
     end 
end 
function myproto_udp_proto.dissector(buffer,pinfo,tree) 
    pinfo.cols.protocol = "myproto UDP" 
    local subtree = tree:add(myproto_udp_proto,buffer(),"myproto UDP Protocol Data") 
    if buffer(0,2):uint() == 0xF00D then 
     subtree:add(buffer(0,2),"Magic(F00D)") 
     local command; 
     local port = -1; 
     if buffer(2,1):uint() == 01 then 
      command = "Searching for server" 
     elseif buffer(2,1):uint() == 02 then 
      command = "I'm server" 
      port = buffer(7,2):uint() 
     else 
      command = "unknown"; 
     end 
     subtree:add(buffer(2,1),command) 
     subtree:add(buffer(3,4),"Server id: " .. buffer(3,4):uint()) 
     if port ~= -1 then 
      subtree:add(buffer(7,2),"Server listening port: " .. buffer(7,2):uint()) 
      subtree:add(buffer(9,4),"check bytes") 
      myproto_tcp_init(port) 
     end 
    else 
     subtree:add(buffer(0,2),"Bad Magic") 
    end 
end 
-- load the udp.port table 
udp_table = DissectorTable.get("udp.port") 
-- register our protocol to handle udp port 1338 
udp_table:add(1338,myproto_udp_proto) 

function myproto_tcp_init(port) 
    -- load the tcp.port table 
    tcp_table = DissectorTable.get("tcp.port") 
    -- register our protocol to handle tcp port !DYNAMIC! 
    tcp_table:add(port,myproto_tcp_proto) 
end 

什么我失踪?
在此先感谢

+0

您是否检查过端口值的端点? – harper 2011-05-13 14:44:37

+0

“我错过了什么?”如何处理错误信息或对什么不起作用的描述? – BMitch 2011-05-13 19:32:11

回答

2

此处介绍的机制有效。问题是端口号是从错误的字节(从缓冲区(4,2)而不是缓冲区(7,2))获取的。

+0

可以发布问题,然后自己找到答案并回答自己的问题。只要确定接受你的答案。 – 2011-05-15 12:29:56

相关问题