-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathradwho
49 lines (39 loc) · 1.52 KB
/
radwho
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
#!/usr/bin/env python
# TODO: Listar tipo da conexao de cada cliente. Ex: pppoe, hotspot
# TODO: pegar as configuracoes de ~/.my.cnf
import MySQLdb
import ConfigParser
import datetime
CONFIG_FILE = '/etc/vigo.conf'
config = ConfigParser.ConfigParser()
config.read(CONFIG_FILE)
connection = MySQLdb.connect(host = config.get('mikrotik', 'hostname'),
user = config.get('mikrotik', 'username'),
passwd = config.get('mikrotik', 'password'),
db = config.get('mikrotik', 'database'))
q = connection.cursor()
q.execute('''\
SELECT
username, framedipaddress, callingstationid,
nasipaddress, acctstarttime, acctsessiontime,
sec_to_time(unix_timestamp(now()) - (unix_timestamp(acctstarttime)+acctsessiontime)) as lastupdate
FROM radacct
WHERE acctstoptime IS NULL
ORDER BY nasipaddress, username;
''')
template = "%-30s %-15s %-17s %-15s %-19s %-16s %s"
print template % ('Login', 'IP', 'MAC', 'Location', 'Start time', 'Session time', 'Last Interim Update')
nas_list = {}
for username, ipaddr, mac, nas, starttime, sessiontime, lastupdate in q:
if nas_list.has_key(nas):
nas_list[nas] += 1
else:
nas_list[nas] = 1
print template % ( username[:30], ipaddr, mac, nas, starttime,
str(datetime.timedelta(seconds=sessiontime)), lastupdate )
print '\n', '-'*30
template = '%-16s: %d'
for nas, count in nas_list.iteritems():
print template % (nas, count)
print template % ('Total', q.rowcount)
print