Первый вариант. Внешний ACL-helper для идентификации пользователей прозрачного squid...
[lua-squid-acl-helper.git] / src / arpcache.lua
1 -- module to access linux ARP cache
2
3 config = require "config"
4
5 _arpcache = {}
6 _ARPCACHE4 = '/sbin/ip -4 n'
7 _ARPCACHE6 = '/sbin/ip -6 n'
8
9 function _match_v4(ip)
10   return string.match(ip,"%d*%.%d*%.%d*%.%d*")
11 end
12
13 function _arpcache.get_mac(ip)
14
15   local cmd
16   if _match_v4(ip) then
17     cmd = _ARPCACHE4
18   else
19     cmd = _ARPCACHE6
20   end
21
22   local f = io.popen(cmd)
23   local res = nil
24   local line, w
25   
26   while true do
27
28     line = f:read()
29     if not line then 
30       break
31     end
32
33     w = {}
34
35     for k in string.gmatch(line, "(%S+)") do
36       table.insert(w, k)
37     end
38
39     if w[1]==ip then
40       res = w[5]
41       break
42     end
43
44   end 
45
46   f:close()
47   return res 
48
49 end
50
51 return _arpcache