2014-05-08 36 views
0

我想获得第一个未在sosDIS端口上通信的数据包的帧时间(相对),并且ip地址不是if语句中提到的那个。但数据包应该使用端口24111.但是,下面的代码不适用于此目的。它的工作原理,直到我加udp_port~=24111。之后,它没有给我任何结果,这意味着它不会进入该条件语句。我试图用多种方式编写条件,甚至将它分离出来作为新的if语句,但它不起作用。我在这里做错了什么。提前感谢您的建议。 下面是一段代码,我目前所面对的Lua脚本从wireshark中提取信息.pcap跟踪

local first_outpacket = 0 
    local flag = 0 
    function stats_first_packet() 
     local udp_port 
     local frame_time 
     local ip_addr 
     frame_time = time_relative_extractor() 
     udp_port = udp_port_extractor() 
     ip_addr = ip_addr_extractor() 
     if (udp_port) then 
      if (not (udp_port == 3000 or udp_port==3838 or flag==1 or ip_addr=="192.168.1.2" or udp_port~=24111)) then 
       first_outpacket = frame_time 
       print(frame_time) 
       flag = 1 
      else 
       -- print("tcp_src_port already recorded") 
      end 
     else 
      -- print("no tcp_src_port") 
     end 
    end 
+0

你能解释一下你试图捕捉的条件吗? –

+0

我想捕获不使用端口3000和3838作为源端口或目标端口(因为这将是DIS数据包或sos端口上的数据包)的第一个UDP数据包。另外它不应该来自IP = 192.168.1.2的通信。但是,它应该在UDP端口24111上.if语句中的flag变量仅用于确保只获取第一个数据包的时间,而不是所有符合条件的数据包。 –

+0

什么是'udp_port_extractor'?这个脚本运行在什么上下文中?这是解剖员吗? –

回答

1

问题显然在于通过extractor()函数返回的数据类型。为了将它们与if语句中的另一个值进行比较,必须使用tostring()函数将它们转换为字符串。 例如:

if (not (tostring(udp_port) == "3000" or tostring(udp_port)=="3838" or flag==1))