ntopng/scripts/lua/find_member.lua
2017-05-12 17:29:52 +02:00

84 lines
2.5 KiB
Lua

--
-- (C) 2017 - ntop.org
--
dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
local host_pools_utils = require "host_pools_utils"
local json = require "dkjson"
sendHTTPHeader('application/json')
local max_num_to_find = 5
local res = {interface=ifname, results={}}
local results = res.results
local query = _GET["query"] or ""
query = string.lower(query)
local pool_id = _GET["pool"] or host_pools_utils.DEFAULT_POOL_ID
interface.select(ifname)
local members = host_pools_utils.getPoolMembers(getInterfaceId(ifname), pool_id)
for _,member in ipairs(members) do
local is_mac = isMacAddress(member.address)
local hostkey, is_network = host_pools_utils.getMemberKey(member.address)
local is_host = (not is_network) and (not is_mac)
local matching = false
if is_host then
local info = interface.getHostInfo(hostkey)
if (info ~= nil) then
-- by DHCP/DNS name
if (info.name ~= nil) and string.contains(string.lower(info.name), query) then
results[#results + 1] = {name=info.name, key=member.key}
matching = true
-- by NBNS name
elseif (info.info ~= nil) and string.contains(string.lower(info.info), query) then
results[#results + 1] = {name=info.info, key=member.key}
matching = true
-- by MAC
elseif (info.mac ~= nil) and string.contains(string.lower(info.mac), query) then
results[#results + 1] = {name=info.mac, key=member.key}
matching = true
else
-- by IP/MAC altName
local altname = getHostAltName(info["ip"], info.mac)
if (altname ~= nil) and string.contains(string.lower(altname), query) then
results[#results + 1] = {name=altname, key=member.key}
matching = true
end
end
end
elseif is_mac then
-- by MAC altName
local altname = getHostAltName(member.address)
if (altname ~= nil) and string.contains(string.lower(altname), query) then
results[#results + 1] = {name=altname, key=member.key}
matching = true
end
end
if (not matching) and string.contains(string.lower(member.address), query) then
local name = member.address
if tonumber(member.vlan) > 0 then
name = name .. " [VLAN " .. member.vlan .. "]"
end
-- Note: the 'name' field is used by typeahead
results[#results + 1] = {name=name, key=member.key}
matching = true
end
if #results == max_num_to_find then
break
end
end
print(json.encode(res, nil, 1))