80 lines
2 KiB
Python
80 lines
2 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Mise a jour periodique des listes d'ip et d'id disponibles.
|
|
|
|
Copyright (C) Alexandre Bos, largement pompe sur ldap_crans.py
|
|
Licence : GPLv2
|
|
"""
|
|
|
|
|
|
from config import NETs
|
|
from iptools import AddrInNet
|
|
|
|
repertoire = '/usr/scripts/var/numeros_disponibles/'
|
|
|
|
"""
|
|
Un petit hack de rien du tout pour s'assurer qu'on n'attribue
|
|
pas ces adresses. Certains services risquent de continuer
|
|
d'essayer de se connecter a ces adresses
|
|
"""
|
|
ancien_vlan_adm = ['10.231.136.0/24']
|
|
|
|
|
|
def lister_ip_dispo(plage):
|
|
f = open(repertoire + 'ip_' + plage)
|
|
lignes = f.readlines()
|
|
liste = []
|
|
for l in lignes:
|
|
liste.append(l.strip())
|
|
return liste
|
|
|
|
def lister_ip_utilisees():
|
|
liste = []
|
|
from ldap_crans import crans_ldap
|
|
db = crans_ldap()
|
|
r = db.search('mid=*')
|
|
machines = r['machineFixe'] + r['machineWifi'] + r['machineCrans'] + r['borneWifi']
|
|
for m in machines:
|
|
liste.append(m.ip())
|
|
return liste
|
|
|
|
def update_ip(plage, occupees):
|
|
net = NETs[plage]
|
|
pool_ip = [] # Pool d'IP à tester
|
|
for ne in net:
|
|
ip = ne.split('/')[0]
|
|
ip = ip.split('.')
|
|
n = []
|
|
for i in ip:
|
|
n.append(int(i))
|
|
while 1:
|
|
if n[3] < 255:
|
|
n[3] += 1
|
|
else:
|
|
n[2] += 1
|
|
n[3] = 0
|
|
if n[2] == 255: break
|
|
ip = "%d.%d.%d.%d" % tuple(n)
|
|
if not AddrInNet(ip, ne):
|
|
# On est allé trop loin
|
|
break
|
|
pool_ip.append(ip)
|
|
|
|
resultat = ''.join('%s\n' % ip for ip in pool_ip if ip not in occupees and not AddrInNet(ip, ancien_vlan_adm))
|
|
|
|
f = open(repertoire + 'ip_' + plage,'w')
|
|
f.write(resultat)
|
|
f.close
|
|
|
|
def update_ip_fixe(occupees):
|
|
update_ip('fil', 'ip_fil', occupees)
|
|
|
|
def update_ip_wifi_adh(occupees):
|
|
update_ip('wifi-adh','ip_wifi-adh', occupees)
|
|
|
|
if __name__ == "__main__":
|
|
ip_occupees = lister_ip_utilisees()
|
|
for net in NETs.keys():
|
|
update_ip(net, ip_occupees)
|