-- module to access linux ARP cache config = require "config" _arpcache = {} _ARPCACHE4 = '/sbin/ip -4 n' _PING6 = '/bin/ping6 -c 1 -W 1' _ARPCACHE6 = '/sbin/ip -6 n' function _match_v4(ip) return string.match(ip,"%d*%.%d*%.%d*%.%d*") end _arpcache.cache = {} function _arpcache.get_mac(ip) local rec = _arpcache.cache[ip] if rec and rec.timestamp+config.arp_ttl > os.time() then return rec["mac"] end local cmd if _match_v4(ip) then cmd = _ARPCACHE4 else os.execute(_PING6..' '..ip) cmd = _ARPCACHE6 end local f = io.popen(cmd) local res = nil local line, w while true do line = f:read() if not line then break end w = {} for k in string.gmatch(line, "(%S+)") do table.insert(w, k) end if w[1]==ip then res = w[5] break end end if res then _arpcache.cache[ip] = { mac = res, timestamp = os.time() } end f:close() return res end return _arpcache