Доброго времени суток
Сабж. Мне нужно из дампа выбрать кто куда обращался и сколько времени продолжалось соединение. Проблема в формате хранения времени в wireshark.
type ( timestamp ) говорит, что это userdata. В строку преобразуется через tostring ( timestamp ), но вот как бы получить обычный человеческий unixtime в виде числа?
З.Ы. всё это мне нужно для анализа производительности сложного комплекса ПО.
proof of concept, выдаёт информацию о соединениях: адреса и порты, количество пакетов, время первого и последнего пакета
do
-- какие поля будем брать из пакетов
-- frame
local frame_time = Field.new("frame.time")
local frame_number = Field.new("frame.number")
-- tcp
local tcp_dstport = Field.new("tcp.dstport")
local tcp_srcport = Field.new("tcp.srcport")
local tcp_stream = Field.new("tcp.stream")
-- ipv4
local ip_dst = Field.new("ip.dst")
local ip_src = Field.new("ip.src")
local library = { }
local function init_listener()
local tap = Listener.new("tcp")
function tap.reset()
print("tap reset")
end
-- вызывается для каждого пакета
function tap.packet(pinfo,tvb)
-- print("tap.packet")
local ipsrc = ip_src()
local ipdst = ip_dst()
local tcpstream = tcp_stream()
local tcpsrcport = tcp_srcport()
local tcpdstport = tcp_dstport()
local frametime = frame_time()
local stream = tostring(tcpstream)
-- уже знаем об этом соединении?
-- да
if library[stream] then
library[stream].endtime = tostring( frametime )
library[stream].packets = library[stream].packets + 1
-- нет, это первый пакет нового соединения
else
library[stream] = {
-- starttime = type ( frametime ),
starttime = tostring ( frametime ),
endtime = tostring ( frametime ),
packets = '1',
info = tostring(ipsrc) .. ':' .. tostring(tcpsrcport) .. " -> " .. tostring(ipdst) .. ':' .. tostring(tcpdstport)
}
end
end
-- вызывается после обработки всех пакетов
function tap.draw()
-- print("tap.draw")
for key, val in pairs(library) do
io.write( string.format("%10i: %s ( %s, %s, %s )\n", key, val.info, val.packets, val.starttime, val.endtime ) )
end
end
end
init_listener()
end
запускать с любым дампом так:
tshark -r dump.raw -X lua_script:script.lua -q