aboutsummaryrefslogtreecommitdiff
path: root/wireshark
diff options
context:
space:
mode:
Diffstat (limited to 'wireshark')
-rw-r--r--wireshark/ndpi.lua88
1 files changed, 57 insertions, 31 deletions
diff --git a/wireshark/ndpi.lua b/wireshark/ndpi.lua
index 028ee8ea7..56fc01050 100644
--- a/wireshark/ndpi.lua
+++ b/wireshark/ndpi.lua
@@ -22,7 +22,7 @@
-- cat /tmp/wireshark.sql | influx -database wireshark
-local ndpi_proto = Proto("ndpi", "nDPI", "nDPI Protocol Interpreter")
+local ndpi_proto = Proto("ndpi", "nDPI Protocol Interpreter")
ndpi_proto.fields = {}
local ndpi_fds = ndpi_proto.fields
@@ -30,7 +30,7 @@ ndpi_fds.network_protocol = ProtoField.new("nDPI Network Protocol", "ndpi.pr
ndpi_fds.application_protocol = ProtoField.new("nDPI Application Protocol", "ndpi.protocol.application", ftypes.UINT8, nil, base.DEC)
ndpi_fds.name = ProtoField.new("nDPI Protocol Name", "ndpi.protocol.name", ftypes.STRING)
-local ntop_proto = Proto("ntop", "ntop", "ntop Extensions")
+local ntop_proto = Proto("ntop", "ntop Extensions")
ntop_proto.fields = {}
local ntop_fds = ntop_proto.fields
@@ -117,6 +117,11 @@ local max_latency_discard = 5000 -- 5 sec
local max_appl_lat_discard = 15000 -- 15 sec
local debug = false
+local dump_timeseries = false
+
+local dump_file = "/tmp/wireshark-influx.txt"
+local file
+
-- ##############################################
function string.contains(String,Start)
@@ -373,6 +378,12 @@ function ndpi_proto.init()
-- RPC
rpc_ts = {}
+
+ if(dump_timeseries) then
+ file = assert(io.open(dump_file, "a"))
+ print("Writing to "..dump_file.."\n")
+ print('Load data with:\ncurl -i -XPOST "http://localhost:8086/write?db=wireshark" --data-binary @/tmp/wireshark-influx.txt\n')
+ end
end
function slen(str)
@@ -548,38 +559,51 @@ end
-- ###############################################
-function flow_dissector(tvb, pinfo, tree)
- local rev_key = getstring(pinfo.dst)..":"..getstring(pinfo.dst_port).."-"..getstring(pinfo.src)..":"..getstring(pinfo.src_port)
- local k
-
- -- 1522511601.2942
- -- 15225115972358
- -- 15246849200000 00000
-
- if(flows[rev_key] ~= nil) then
- flows[rev_key][2] = flows[rev_key][2] + pinfo.len
- k = rev_key
- else
- local key = getstring(pinfo.src)..":"..getstring(pinfo.src_port).."-"..getstring(pinfo.dst)..":"..getstring(pinfo.dst_port)
-
- k = key
- if(flows[key] == nil) then
- flows[key] = { pinfo.len, 0 } -- src -> dst / dst -> src
- tot_flows = tot_flows + 1
+function timeseries_dissector(tvb, pinfo, tree)
+ if(pinfo.dst_port ~= 0) then
+ local rev_key = getstring(pinfo.dst)..":"..getstring(pinfo.dst_port).."-"..getstring(pinfo.src)..":"..getstring(pinfo.src_port)
+ local k
+
+ if(flows[rev_key] ~= nil) then
+ flows[rev_key][2] = flows[rev_key][2] + pinfo.len
+ k = rev_key
else
- flows[key][1] = flows[key][1] + pinfo.len
+ local key = getstring(pinfo.src)..":"..getstring(pinfo.src_port).."-"..getstring(pinfo.dst)..":"..getstring(pinfo.dst_port)
+
+ k = key
+ if(flows[key] == nil) then
+ flows[key] = { pinfo.len, 0 } -- src -> dst / dst -> src
+ tot_flows = tot_flows + 1
+ else
+ flows[key][1] = flows[key][1] + pinfo.len
+ end
end
- end
+
+ --k = pinfo.curr_proto..","..k
+
+ local bytes = flows[k][1]+flows[k][2]
+ local row
- local bytes = flows[k][1]+flows[k][2]
- local row = "wireshark,"..k.." bytes=".. bytes .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000\n"
-
- print(row)
- file = io.open("/tmp/wireshark.sql", "a")
- file:write(row)
- file:close()
- -- en0,metric=iface packets.rcvd=213 1524684920000000000
+ -- Prometheus
+ -- row = "wireshark {metric=\"bytes\", flow=\""..k.."\"} ".. bytes .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000"
+
+ -- Influx
+ row = "wireshark,flow="..k.." bytes=".. pinfo.len .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000"
+ file:write(row.."\n")
+
+ row = "wireshark,ndpi="..ndpi.protocol_name.." bytes=".. pinfo.len .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000"
+ file:write(row.."\n")
+
+ row = "wireshark,host="..getstring(pinfo.src).." sent=".. pinfo.len .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000"
+ file:write(row.."\n")
+
+ row = "wireshark,host="..getstring(pinfo.dst).." rcvd=".. pinfo.len .. " ".. (tonumber(pinfo.abs_ts)*10000).."00000"
+ file:write(row.."\n")
+ -- print(row)
+
+ file:flush()
+ end
end
-- ###############################################
@@ -959,7 +983,9 @@ function ndpi_proto.dissector(tvb, pinfo, tree)
--print("Processing packet "..pinfo.number .. "["..srckey.." / "..dstkey.."]")
end
- flow_dissector(tvb, pinfo, tree)
+ if(dump_timeseries) then
+ timeseries_dissector(tvb, pinfo, tree)
+ end
mac_dissector(tvb, pinfo, tree)
arp_dissector(tvb, pinfo, tree)
vlan_dissector(tvb, pinfo, tree)