2011-05-13 68 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

相關問題