File: mac_utils.lua

package info (click to toggle)
ntopng 5.2.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 121,832 kB
  • sloc: javascript: 143,431; cpp: 71,175; ansic: 11,108; sh: 4,687; makefile: 911; python: 587; sql: 512; pascal: 234; perl: 118; ruby: 52; exp: 4
file content (111 lines) | stat: -rw-r--r-- 3,485 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
require "lua_utils"
local discover = require "discover_utils"

-- Get from redis the throughput type bps or pps
local throughput_type = getThroughputType()

local now = os.time()

function printMacHosts(mac)
   local mac_hosts = interface.getMacHosts(mac)
   local num_hosts = table.len(mac_hosts)

   if num_hosts > 0 then
      local first_host

      for _, h in pairsByKeys(mac_hosts, asc) do
	 first_host = h
	 break
      end

      local url = ntop.getHttpPrefix().."/lua/hosts_stats.lua?mac="..mac
      local host_url = hostinfo2detailsurl(first_host)
      local host_label = first_host["ip"]

      if num_hosts > 2 then
	 return i18n("mac_details.and_n_more_hosts", {host_url = host_url, host_label = host_label, url = url, num = num_hosts})
      elseif num_hosts > 1 then
	 return i18n("mac_details.and_one_more_host", {host_url = host_url, host_label = host_label, url = url})
      else
	 return i18n("mac_details.mac_host", {host_url = host_url, host_label = host_label})
      end
   end

   return ''
end

function macAddIcon(mac, pre)
   local pre = pre or mac
   if not isSpecialMac(mac) then
      local icon = discover.devtype2icon(mac.devtype)

      if not isEmptyString(icon) then
         return pre.." "..icon
      end
   end

   return pre
end

function mac2link(mac, cached_name, alt_name)
   local macaddress = mac["mac"]

   if alt_name and not isEmptyString(alt_name) then
      macaddress = alt_name
   end

   if cached_name then
      macaddress = mac2label(macaddress)
   end

   return "<A HREF='"..ntop.getHttpPrefix()..'/lua/mac_details.lua?'..hostinfo2url(mac).."' title='"..macaddress.."'>"..macaddress..'</A>'
end

function mac2record(mac)
   local record = {}
   record["key"] = hostinfo2jqueryid(mac)

   record["column_mac"] = mac2link(mac)

   if(mac.fingerprint ~= "") then
      record["column_mac"] = record["column_mac"]..' <i class="fas fa-hand-o-up fa-lg" aria-hidden="true" title="DHCP Fingerprinted"></i>'
      -- io.write(mac.fingerprint.."\n")
   end
   
   local manufacturer = get_manufacturer_mac(mac["mac"])
   if(manufacturer == nil) then manufacturer = "" end

   if(mac["model"] ~= nil) then
      local _model = discover.apple_products[mac["model"]] or mac["model"]
      manufacturer = manufacturer .. " [ ".. shortenString(_model) .." ]"
   end
   
   record["column_manufacturer"] = manufacturer

   record["column_arp_total"] = formatValue(mac["arp_requests.sent"]
					       + mac["arp_replies.sent"]
					       + mac["arp_requests.rcvd"]
					       + mac["arp_replies.rcvd"])

   record["column_device_type"] = discover.devtype2string(mac["devtype"]).." "..discover.devtype2icon(mac["devtype"])

   record["column_hosts"] = mac["num_hosts"]..""
   record["column_since"] = secondsToTime(now - mac["seen.first"]+1)

   local sent2rcvd = round((mac["bytes.sent"] * 100) / (mac["bytes.sent"] + mac["bytes.rcvd"]), 0)
   record["column_breakdown"] = "<div class='progress'><div class='progress-bar bg-warning' style='width: "
      .. sent2rcvd .."%;'>Sent</div><div class='progress-bar bg-success' style='width: " .. (100-sent2rcvd) .. "%;'>Rcvd</div></div>"

   if(throughput_type == "pps") then
      record["column_thpt"] = pktsToSize(mac["throughput_pps"])
   else
      record["column_thpt"] = bitsToSize(8*mac["throughput_bps"])
   end

   record["column_traffic"] = bytesToSize(mac["bytes.sent"] + mac["bytes.rcvd"])

   record["column_name"] = getDeviceName(mac["mac"], true)

   return record
end