scripts/wifi/lease.py
bernat 8b68c69f29 Pas d'adresse MAC pour certains baux.
darcs-hash:20051118160212-d1718-e7caab144b71f402e12b0079c088624fab9e6525.gz
2005-11-18 17:02:12 +01:00

65 lines
2.2 KiB
Python
Executable file

#! /usr/bin/env python
# -*- encoding: iso-8859-15 -*-
# Gestion en lecture d'un fichier lease (issu du DHCPD d'Open)
import re
import time
class Lease:
"""Classe représentant un bail (lease)."""
def __init__(self, texte):
"""Instanciation d'un bail
L'instanciation se fait en fournissant `texte' qui est la
forme textuelle du bail qui se trouve dans
/var/db/dhcpd.leases de la forme :
lease 10.231.149.89 {
starts 3 2005/11/09 07:58:52;
ends 3 2005/11/09 08:13:52;
hardware ethernet 00:0c:f1:37:54:2c;
uid 01:00:0c:f1:37:54:2c;
client-hostname "FCDVIRELY";
}
"""
mo = re.search("\\blease ([0-9\\.]*) \\{", texte)
if not mo:
raise ValueError, u"Pas de bail trouvé"
self.ip = mo.group(1)
mo = re.search("\\bstarts [0-7] ([0-9/]* [0-9:]*);", texte)
if not mo:
raise ValueError, u"Pas de date de début de bail"
self.start = time.strptime(mo.group(1), "%Y/%m/%d %H:%M:%S")
mo = re.search("\\bends [0-7] ([0-9/]* [0-9:]*);", texte)
if not mo:
raise ValueError, u"Pas de date de fin de bail"
self.end = time.strptime(mo.group(1), "%Y/%m/%d %H:%M:%S")
mo = re.search("\\bhardware ethernet ([0-9a-f:]*);", texte)
if not mo:
raise ValueError, u"Pas d'adresse Ethernet pour le bail %s" % self.ip
self.mac = mo.group(1)
# On n'est pas intéressé par le reste
class Leases:
"""Classe représentant un ensemble de bails."""
def __init__(self, fichier="/var/db/dhcpd.leases"):
"""Instanciation à partir du fichier de leases."""
self.leases = []
# Méthode rapide :
for lease in " ".join(file(fichier).readlines()).split("}")[:-1]:
try:
nouveau = Lease(lease)
# On enleve les anciens
self.leases = filter(lambda x: x.ip != nouveau.ip, self.leases)
# On rajoute le nouveau
self.leases.append(nouveau)
except ValueError:
# Certains baux peuvent ne pas avoir d'adresse MAC
pass