mac2hostname: corretto errore e aggiunta rotta nuova per gestire l'indirizzo MAC direttamente.

This commit is contained in:
Emiliano Vavassori 2015-06-15 23:40:08 +02:00
parent 9ca6696cdc
commit ab7dc30a99

View File

@ -6,6 +6,7 @@ from contextlib import contextmanager, closing
from sqlite3 import connect from sqlite3 import connect
from bottle import route, run, request from bottle import route, run, request
from json import dumps from json import dumps
import re
import os import os
__author__ = "Enrico Bacis" __author__ = "Enrico Bacis"
@ -53,13 +54,23 @@ def gethostname(mac, base=None):
(hostname,) = cursor.execute('SELECT hostname FROM client WHERE mac = "%s"' % mac) (hostname,) = cursor.execute('SELECT hostname FROM client WHERE mac = "%s"' % mac)
return hostname return hostname
def getmac(ip):
check_output(['ping', '-c1', '-t2', ip])
arp = check_output(['arp', '-n', ip])
return re.search(r'(([\da-fA-F]{1,2}\:){5}[\da-fA-F]{1,2})', arp).group(1)
@route('/mac2hostname') @route('/mac2hostname')
def mac2hostname(): def mac2hostname():
mac = request.query.mac mac, base = request.query.mac, request.query.base
if not mac: if not mac:
return 'Usage: GET /mac2hostname?mac=XX_XX_XX_XX_XX_XX[&base=YYY]' return 'Usage: GET /mac2hostname?mac=XX_XX_XX_XX_XX_XX[&base=YYY]'
return gethostname(mac, base) return gethostname(mac, base)
@route('/whatsmyhostname')
def whatsmyhostname():
ip = request.query.ip or request['REMOTE_ADDR']
return gethostname(getmac(ip), request.query.base)
if __name__ == '__main__': if __name__ == '__main__':
init_tables() init_tables()
run(host='0.0.0.0', port=3000) run(host='0.0.0.0', port=3000)