2014-05-08 93 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))