Read dhcp_hosts file

This commit is contained in:
Andy Teijelo Pérez 2015-11-05 12:15:35 -05:00
parent 7dbab7dd74
commit cb5b171018
7 changed files with 221 additions and 7 deletions

132
dhcp-hosts.dpto2 Normal file
View file

@ -0,0 +1,132 @@
# { "reserved-by": "Andy", "locked": true }
5c:f9:ff:ff:ff:ff,00:23:ff:ff:ff:ff,10.6.122.35,set:client5cf9ffffffff
# lara
00:e0:ff:ff:ff:ff,4c:72:ff:ff:ff:ff,10.0.0.1
# { "reserved-by": "Andy" }
f0:e0:ff:ff:ff:ff,10.0.0.132
# nexus 5
f8:a9:ff:ff:ff:ff,10.0.0.36,set:clientf8a9ffffffff
ff:ff:ff:ff:ff:fe,10.0.0.2
ff:ff:ff:ff:ff:fe,10.0.0.3
ff:ff:ff:ff:ff:fe,10.0.0.4
ff:ff:ff:ff:ff:fe,10.0.0.5
ff:ff:ff:ff:ff:fe,10.0.0.6
ff:ff:ff:ff:ff:fe,10.0.0.7
ff:ff:ff:ff:ff:fe,10.0.0.8
ff:ff:ff:ff:ff:fe,10.0.0.9
ff:ff:ff:ff:ff:fe,10.0.0.10
ff:ff:ff:ff:ff:fe,10.0.0.11
ff:ff:ff:ff:ff:fe,10.0.0.12
ff:ff:ff:ff:ff:fe,10.0.0.13
ff:ff:ff:ff:ff:fe,10.0.0.14
ff:ff:ff:ff:ff:fe,10.0.0.15
ff:ff:ff:ff:ff:fe,10.0.0.16
ff:ff:ff:ff:ff:fe,10.0.0.17
ff:ff:ff:ff:ff:fe,10.0.0.18
ff:ff:ff:ff:ff:fe,10.0.0.19
ff:ff:ff:ff:ff:fe,10.0.0.20
ff:ff:ff:ff:ff:fe,10.0.0.21
ff:ff:ff:ff:ff:fe,10.0.0.22
ff:ff:ff:ff:ff:fe,10.0.0.23
ff:ff:ff:ff:ff:fe,10.0.0.24
ff:ff:ff:ff:ff:fe,10.0.0.25
ff:ff:ff:ff:ff:fe,10.0.0.27
ff:ff:ff:ff:ff:fe,10.0.0.30
ff:ff:ff:ff:ff:fe,10.0.0.31
ff:ff:ff:ff:ff:fe,10.0.0.32
ff:ff:ff:ff:ff:fe,10.0.0.34
ff:ff:ff:ff:ff:fe,10.0.0.37
ff:ff:ff:ff:ff:fe,10.0.0.38
ff:ff:ff:ff:ff:fe,10.0.0.39
ff:ff:ff:ff:ff:fe,10.0.0.40
ff:ff:ff:ff:ff:fe,10.0.0.41
ff:ff:ff:ff:ff:fe,10.0.0.42
ff:ff:ff:ff:ff:fe,10.0.0.43
ff:ff:ff:ff:ff:fe,10.0.0.44
ff:ff:ff:ff:ff:fe,10.0.0.45
ff:ff:ff:ff:ff:fe,10.0.0.46
ff:ff:ff:ff:ff:fe,10.0.0.47
ff:ff:ff:ff:ff:fe,10.0.0.48
ff:ff:ff:ff:ff:fe,10.0.0.49
ff:ff:ff:ff:ff:fe,10.0.0.50
ff:ff:ff:ff:ff:fe,10.0.0.51
ff:ff:ff:ff:ff:fe,10.0.0.52
ff:ff:ff:ff:ff:fe,10.0.0.53
ff:ff:ff:ff:ff:fe,10.0.0.54
ff:ff:ff:ff:ff:fe,10.0.0.55
ff:ff:ff:ff:ff:fe,10.0.0.56
ff:ff:ff:ff:ff:fe,10.0.0.57
ff:ff:ff:ff:ff:fe,10.0.0.58
ff:ff:ff:ff:ff:fe,10.0.0.59
ff:ff:ff:ff:ff:fe,10.0.0.60
ff:ff:ff:ff:ff:fe,10.0.0.61
ff:ff:ff:ff:ff:fe,10.0.0.62
ff:ff:ff:ff:ff:fe,10.0.0.63
ff:ff:ff:ff:ff:fe,10.0.0.64
ff:ff:ff:ff:ff:fe,10.0.0.65
ff:ff:ff:ff:ff:fe,10.0.0.66
ff:ff:ff:ff:ff:fe,10.0.0.67
ff:ff:ff:ff:ff:fe,10.0.0.68
ff:ff:ff:ff:ff:fe,10.0.0.69
ff:ff:ff:ff:ff:fe,10.0.0.70
ff:ff:ff:ff:ff:fe,10.0.0.71
ff:ff:ff:ff:ff:fe,10.0.0.72
ff:ff:ff:ff:ff:fe,10.0.0.73
ff:ff:ff:ff:ff:fe,10.0.0.74
ff:ff:ff:ff:ff:fe,10.0.0.75
ff:ff:ff:ff:ff:fe,10.0.0.76
ff:ff:ff:ff:ff:fe,10.0.0.77
ff:ff:ff:ff:ff:fe,10.0.0.78
ff:ff:ff:ff:ff:fe,10.0.0.79
ff:ff:ff:ff:ff:fe,10.0.0.80
ff:ff:ff:ff:ff:fe,10.0.0.81
ff:ff:ff:ff:ff:fe,10.0.0.82
ff:ff:ff:ff:ff:fe,10.0.0.83
ff:ff:ff:ff:ff:fe,10.0.0.84
ff:ff:ff:ff:ff:fe,10.0.0.85
ff:ff:ff:ff:ff:fe,10.0.0.86
ff:ff:ff:ff:ff:fe,10.0.0.87
ff:ff:ff:ff:ff:fe,10.0.0.88
ff:ff:ff:ff:ff:fe,10.0.0.89
ff:ff:ff:ff:ff:fe,10.0.0.90
ff:ff:ff:ff:ff:fe,10.0.0.91
ff:ff:ff:ff:ff:fe,10.0.0.92
ff:ff:ff:ff:ff:fe,10.0.0.93
ff:ff:ff:ff:ff:fe,10.0.0.94
ff:ff:ff:ff:ff:fe,10.0.0.95
ff:ff:ff:ff:ff:fe,10.0.0.96
ff:ff:ff:ff:ff:fe,10.0.0.97
ff:ff:ff:ff:ff:fe,10.0.0.98
ff:ff:ff:ff:ff:fe,10.0.0.99
ff:ff:ff:ff:ff:fe,10.0.0.100
ff:ff:ff:ff:ff:fe,10.0.0.101
ff:ff:ff:ff:ff:fe,10.0.0.102
ff:ff:ff:ff:ff:fe,10.0.0.103
ff:ff:ff:ff:ff:fe,10.0.0.104
ff:ff:ff:ff:ff:fe,10.0.0.105
ff:ff:ff:ff:ff:fe,10.0.0.106
ff:ff:ff:ff:ff:fe,10.0.0.107
ff:ff:ff:ff:ff:fe,10.0.0.108
ff:ff:ff:ff:ff:fe,10.0.0.109
ff:ff:ff:ff:ff:fe,10.0.0.110
ff:ff:ff:ff:ff:fe,10.0.0.111
ff:ff:ff:ff:ff:fe,10.0.0.112
ff:ff:ff:ff:ff:fe,10.0.0.113
ff:ff:ff:ff:ff:fe,10.0.0.114
ff:ff:ff:ff:ff:fe,10.0.0.115
ff:ff:ff:ff:ff:fe,10.0.0.116
ff:ff:ff:ff:ff:fe,10.0.0.117
ff:ff:ff:ff:ff:fe,10.0.0.118
ff:ff:ff:ff:ff:fe,10.0.0.119
ff:ff:ff:ff:ff:fe,10.0.0.120
ff:ff:ff:ff:ff:fe,10.0.0.121
ff:ff:ff:ff:ff:fe,10.0.0.122
ff:ff:ff:ff:ff:fe,10.0.0.123
ff:ff:ff:ff:ff:fe,10.0.0.124
ff:ff:ff:ff:ff:fe,10.0.0.125
ff:ff:ff:ff:ff:fe,10.0.0.126
ff:ff:ff:ff:ff:fe,10.0.0.127

1
dhcp-opts.dpto2 Normal file
View file

@ -0,0 +1 @@
tag:client5cf9ffffffff,option:router,10.0.0.1

51
main.py
View file

@ -3,6 +3,7 @@
from flask import Flask, request, abort, make_response, \
render_template, redirect, url_for, \
json, jsonify, session, flash
from collections import namedtuple
import hashlib
import random
import shutil
@ -162,9 +163,54 @@ def list_users():
lines = render_users_tree(tree)
return render_template("users.html", users=lines)
mac_re = re.compile("(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}")
ip_re = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
DhcpHostLine = namedtuple("DhcpHostLine","macs ip")
def parse_dchp_host(line):
macs = []
ip = ""
parts = line.split(",")
for p in parts:
p = p.strip()
m = mac_re.match(p)
if m:
macs.append(m.group(0))
m = ip_re.match(p)
if m:
ip = m.group(0)
return DhcpHostLine(macs, ip)
Ip = namedtuple("Ip","reserved_by dhcp")
@app.route("/ips")
def ips():
return render_template("ips.html")
ipmap = {}
for i in range(1,255):
ipmap[i] = Ip("",True)
ipmap[0] = ipmap[255] = Ip("", False)
with open(dhcp_hosts_file) as f:
meta = {}
for line in f:
line = line.strip()
if line.startswith("#"):
try:
meta = json.loads(line[1:])
except:
meta = {}
continue
if not isinstance(meta,dict):
meta = {}
continue
if re.match("^[0-9a-fA-F]{2}:",line):
r = parse_dchp_host(line)
ip = int(r.ip.split(".")[-1])
ipmap[ip] = Ip(meta.get("reserved-by",""), False)
return render_template("ips.html", ipmap=ipmap)
@app.route("/ip/<int:addr>")
def ip(addr):
return render_template("ip.html", ip=addr)
@app.route("/logout")
def logout():
@ -174,6 +220,7 @@ def logout():
if __name__ == '__main__':
if "debug" in sys.argv:
users_file = "users.dpto2"
dhcp_hosts_file = "dhcp_hosts.dpto2"
dhcp_hosts_file = "dhcp-hosts.dpto2"
dhcp_opts_file = "dhcp-opts.dpto2"
app.debug = True
app.run(host="0.0.0.0")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 200 B

20
templates/ip.html Normal file
View file

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% block title %}Subir Circuito{% endblock %}
{% block head %}
{{ super() }}
{% endblock %}
{% block content %}
<div class="row">
<h3>Asignación de 10.6.122.{{ ip }}</h3>
</div>
<div class="row">
<form action="" class="form-horizontal" method="POST">
</form>
</div>
{% endblock %}

View file

@ -23,17 +23,17 @@
{%- if col == 7 %} ips-ver-half{% endif %}
{%- if row == 7 %} ips-hor-half{% endif %}
{% if unusable %} unusable{% endif %}
{%- if 216 <= ip <= 239 %} dhcp-pool{% endif -%}
{%- if ipmap[ip].dhcp %} dhcp-pool{% endif -%}
">
<div class="name">
{% if 99 <= ip <= 103 or ip == 96%}
Andy
{% elif 216 <= ip <= 239 %}
{% if ipmap[ip].dhcp %}
DHCP
{% else %}
{{ ipmap[ip].reserved_by }}
{% endif %}
</div>
{% if usable %}
{% if ip == 14 or ip == 99 %}
{% if ipmap[ip].locked %}
<span class="lock"><i class="fa fa-lock"></i></span>
{% endif %}
<span class="ip">.{{ row*16 + col }}</span>

14
users.dpto2 Normal file
View file

@ -0,0 +1,14 @@
# Sample users file, all hashes below are for the password "password"
guest Cleartext-Password := "jpqfvxat"
ateijelo NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C"
apiad NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by ateijelo
pepe NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by ateijelo
yudy NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by ateijelo
dvd NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by apiad
coto NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by dvd
amy NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by dvd
lapepa NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by pepe
Bolufe NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by apiad
hydn NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C"
oscarluis NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by hydn
luilver NT-Password := "8846F7EAEE8FB117AD06BDD830B7586C" # created by pepe