mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 15:39:33 +00:00
ARP Map (#2540)
* arp matrix graph and fix * bug fix * graph fix * bug fix * tests on arp graph * merged heatmap.js and map.js * graph dinamic resize * minor fix * graph dinamic width * graph performance improvement * clean code * fix manual refresh * message for empty graph * clean code * more clean * update arpMap and host details * migrate to v4.min version of d3.js
This commit is contained in:
parent
94b143c8a3
commit
1d9b35be42
13 changed files with 1247 additions and 224 deletions
|
|
@ -1,5 +1,5 @@
|
|||
--
|
||||
-- (C) 2013-18 - ntop.org
|
||||
-- (C) 2013-19 - ntop.org
|
||||
--
|
||||
|
||||
local dirs = ntop.getDirs()
|
||||
|
|
@ -7,8 +7,133 @@ package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
|
|||
require "lua_utils"
|
||||
|
||||
local json = require("dkjson")
|
||||
sendHTTPContentTypeHeader('application/json')
|
||||
|
||||
local matrix = interface.getArpStatsMatrixInfo()
|
||||
|
||||
sendHTTPContentTypeHeader('application/json')
|
||||
print(json.encode(matrix, {indent = true}))
|
||||
local host_info = url2hostinfo(_GET)
|
||||
local host_ip = host_info["host"]
|
||||
local page = _GET["page"]
|
||||
|
||||
local treshold = 0
|
||||
|
||||
local function createHeatmap(matrix, type)
|
||||
|
||||
if not matrix then return nil end
|
||||
|
||||
local t = {}
|
||||
local tmp = {}
|
||||
local v = 0
|
||||
local t_res = {}
|
||||
|
||||
-- function cmp(a,b)
|
||||
-- return a.y_label > b.y_label
|
||||
-- end
|
||||
|
||||
for _, m_elem in pairs(matrix) do
|
||||
for i,stats in pairs(m_elem)do
|
||||
tmp = split(i,"-")
|
||||
src_ip = tmp[1]
|
||||
dst_ip = tmp[2]
|
||||
|
||||
if type == "requests" then v = stats["src2dst.requests"]
|
||||
elseif type == "replies" then v = stats["src2dst.replies"]
|
||||
elseif type == "all" then v = stats["src2dst.requests"] + stats["src2dst.replies"]
|
||||
end
|
||||
|
||||
if v > treshold then
|
||||
table.insert( t_res, { x_label = dst_ip, y_label = src_ip, value = v })
|
||||
end
|
||||
v = 0
|
||||
|
||||
if type == "requests" then v = stats["dst2src.requests"]
|
||||
elseif type == "replies" then v = stats["dst2src.replies"]
|
||||
elseif type == "all" then v = stats["dst2src.requests"] + stats["dst2src.replies"]
|
||||
end
|
||||
|
||||
if v > treshold then
|
||||
table.insert( t_res, { x_label = src_ip, y_label = dst_ip, value = v })
|
||||
end
|
||||
--table.sort(t_res, cmp) --for lexicographical order
|
||||
end
|
||||
end
|
||||
|
||||
return t_res
|
||||
end
|
||||
|
||||
--NOTE: function currently not used
|
||||
local function createMap4Target(matrix, type, ip_target)
|
||||
local tmp = {}
|
||||
local v = 0
|
||||
local t_res = {}
|
||||
local treshold = 0
|
||||
|
||||
for _, m_elem in pairs(matrix) do
|
||||
for i,stats in pairs(m_elem)do
|
||||
|
||||
tmp = split(i,"-")
|
||||
src_ip = tmp[1]
|
||||
dst_ip = tmp[2]
|
||||
|
||||
if type == "requests" then v = stats["src2dst.requests"]
|
||||
elseif type == "replies" then v = stats["src2dst.replies"]
|
||||
elseif type == "all" then v = stats["src2dst.requests"] + stats["src2dst.replies"]
|
||||
end
|
||||
|
||||
if (v > treshold) and (src_ip == ip_target) then
|
||||
table.insert( t_res, { x_label = dst_ip, y_label = src_ip, value = v })
|
||||
end
|
||||
v = 0
|
||||
|
||||
if type == "requests" then v = stats["dst2src.requests"]
|
||||
elseif type == "replies" then v = stats["dst2src.replies"]
|
||||
elseif type == "all" then v = stats["dst2src.requests"] + stats["dst2src.replies"]
|
||||
end
|
||||
|
||||
if (v > treshold) and (dst_ip == ip_target) then
|
||||
table.insert( t_res, { x_label = src_ip, y_label = dst_ip, value = v })
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return t_res
|
||||
end
|
||||
|
||||
--return 2 counters: number of ARP requests received, and the number of senders for that requests
|
||||
local function arpTalkers(matrix, host_ip)
|
||||
local req_num = 0;
|
||||
local talkers_num = 0;
|
||||
|
||||
if (matrix and host_ip) then
|
||||
|
||||
for _, m_elem in pairs(matrix) do
|
||||
for i, stats in pairs(m_elem)do
|
||||
tmp = split(i,"-")
|
||||
src_ip = tmp[1]
|
||||
dst_ip = tmp[2]
|
||||
|
||||
if ((stats["src2dst.requests"] > 0) and (src_ip == host_ip)) or
|
||||
((stats["dst2src.requests"] > 0) and (dst_ip == host_ip))then
|
||||
|
||||
req_num = req_num + stats["src2dst.requests"] + stats["dst2src.requests"]
|
||||
talkers_num = talkers_num + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
return {talkers_num = talkers_num, req_num = req_num}
|
||||
end
|
||||
|
||||
if host_ip then
|
||||
print( json.encode( arpTalkers(matrix, host_ip) ) )
|
||||
else
|
||||
print( json.encode( createHeatmap(matrix, "all"), {indent = true} ) )
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue