Gérer serveur DHCP ?

Gérer serveur DHCP ? - Réseaux - Systèmes & Réseaux Pro

Marsh Posté le 05-04-2011 à 08:56:14    

Hello,
 
Avez vous des solutions pour gérer/voir les logs plus facilement d'un serveur dhcp sous Ubuntu server ? Un outils de monitoring, voir les la durée des baux, voir quelles adresses sont prises et celles non...Avoir une vu globale du serveur quoi.
 
J'ai cherché mais je n'ai pas vu grand chose d'intéressant...à part un petit script qui permet de d'être alerter par mail dès que quelqu'un obtient une adresses (en surveillant la taille du fichier dhclient.lease) mais bon...
 
Merci d'avance :)


Message édité par zit11 le 05-04-2011 à 08:57:48

---------------
Je suis pas Superman, je suis Super-vagabond, mais toi t’es Super-pomme. Tu es très gouteuse, tu es très... biologique, très naturelle ! Tu es la pomme de ma vie.
Reply

Marsh Posté le 05-04-2011 à 08:56:14   

Reply

Marsh Posté le 06-04-2011 à 10:40:51    

Je me réponds :o
 
En gros, y a pas de gestion rapide...Mais avec 2/3 scripts on peut s'en sortir.
Voici ce que j'ai trouvé :
 
Ce petit script en perl permet de récuperer les infos de dhcpd.leases et d'avoir un ptit récapitulatif du bail, du constructeur (suivant l'adresse mac) avec le fichier oui.txt qui contient la liste des constructeurs.
 
script perl :

Code :
  1. #!/usr/bin/perl
  2. #
  3. # Shows current leases.
  4. #
  5. # THIS SCRIPT IS PUBLIC DOMAIN, NO RIGHTS RESERVED!
  6. # 2008-07-13, Christian Hammers <ch@lathspell.de>
  7. #
  8. use strict;
  9. use warnings;
  10. use POSIX qw(strftime);
  11. my $LEASES = '/var/lib/dhcp3/dhcpd.leases';
  12. my @all_leases;
  13. my @leases;
  14. my @OUIS = ('/usr/share/misc/oui.txt', '/usr/local/etc/oui.txt');
  15. my $OUI_URL = 'http://standards.ieee.org/regauth/oui/oui.txt';
  16. my $oui;
  17. my %data;
  18. my $opt_format = 'human';
  19. my $opt_keep = 'active';
  20. ## Return manufactorer name for specified MAC address (aa:bb:cc:dd:ee:ff).
  21. sub get_manufactorer_for_mac($) {
  22.     my $manu = "";
  23.     if (defined $oui) {
  24.         $manu = join('-', ($_[0] =~ /^(..):(..):(..):/));
  25.         $manu = `grep -i '^$manu' $oui | cut -f3`;
  26.         chomp($manu);
  27.     }
  28.     return $manu;
  29. }
  30. ## Read oui.txt or print warning.
  31. sub check_oui_file() {
  32.     for my $oui_cand (@OUIS) {
  33.         if ( -r $oui_cand) {
  34.         $oui = $oui_cand;
  35.         last;
  36.         }
  37.     }
  38.     print(STDERR "Please download $OUI_URL to /usr/local/etc/oui.txt\n" ) if not defined $oui;
  39. }
  40. ## Read current leases file into array.
  41. sub read_dhcpd_leases() {
  42.     open(F, $LEASES) or die("Cannot open $LEASES: $!" );
  43.     my $content = join('', <F> );
  44.     close(F);
  45.     @all_leases = split(/lease/, $content);
  46. }
  47. ## Add manufactor name and sort out obsolet assignements.
  48. sub process_leases() {
  49.     my $gm_now = strftime("%Y/%m/%d %H:%M:%S", gmtime());
  50.     my %tmp_leases; # for sorting and filtering
  51.     # parse entries
  52.     foreach my $lease (@all_leases) {
  53.         # skip invalid lines
  54.         next if not ($lease =~ /^\s+([\.\d]+)\s+{.*starts \d+ ([\/\d\ \:]+);.*ends \d+ ([\/\d\ \:]+);.*ethernet ([a-f0-9:]+);/s);
  55.         # skip outdated lines
  56.         next if ($opt_keep eq 'active'  and  $3 lt $gm_now);
  57.         my $mac = $4;
  58.         my $date_end = $3;
  59.         my %entry = (
  60.             'ip' => $1,
  61.             'date_begin' => $2,
  62.             'date_end' => $date_end,
  63.             'mac' => $mac,
  64.             'manu' => get_manufactorer_for_mac($mac),
  65.         );
  66.         $entry{'date_begin'} =~ s#\/#-#g; # long live ISO 8601
  67.         $entry{'date_end'}   =~ s#\/#-#g;
  68.         if ($opt_keep eq 'all') {
  69.             push(@leases, \%entry);
  70.         } elsif (not defined $tmp_leases{$mac}  or  $tmp_leases{$mac}{'date_end'} gt $date_end) {
  71.             $tmp_leases{$mac} = \%entry;
  72.         }
  73.     }
  74.     # In case we used the hash to filtered
  75.     if (%tmp_leases) {
  76.         foreach (sort keys %tmp_leases) {
  77.             my $h = $tmp_leases{$_};
  78.             push(@leases, $h);
  79.         }
  80.     }
  81. }
  82. # Output all valid leases.
  83. sub output_leases() {
  84.     if ($opt_format eq 'human') {
  85.         print("#      MAC            IP             valid until           manufactorer\n" );
  86.     }
  87.     foreach (@leases) {
  88.         if ($opt_format eq 'human') {
  89.             printf("%s  %s  %s  %s\n",
  90.                 $_->{'mac'},                 # MAC
  91.                 $_->{'ip'},        # IP address
  92.                 $_->{'date_end'},  # Date
  93.                 $_->{'manu'});     # manufactor name
  94.         } else {
  95.             printf("MAC %s IP %s BEGIN %s END %s MANUFACTORER %s\n",
  96.                 $_->{'mac'},
  97.                 $_->{'ip'},
  98.                 $_->{'date_begin'},
  99.                 $_->{'date_end'},
  100.                 $_->{'manu'});
  101.         }
  102.     }
  103. }
  104. # Commandline Processing.
  105. sub cli_processing() {
  106.     while (my $arg = shift(@ARGV)) {
  107.         if ($arg eq '--help') {
  108.             print(
  109.                   "Prints active DHCP leases.\n\n".
  110.                   "Usage: $0 [options]\n".
  111.                   " --help      shows this help\n".
  112.                   " --parsable  machine readable output with full dates\n".
  113.                   " --last      prints the last (even if end<now) entry for every MAC\n".
  114.                   " --all       prints all entries i.e. more than one per MAC\n".
  115.                   "\n" );
  116.             exit(0);                 
  117.         } elsif ($arg eq '--parsable') {
  118.             $opt_format = 'parsable';
  119.         } elsif ($arg eq '--last') {
  120.             $opt_keep = 'last';
  121.         } elsif ($arg eq '--all') {
  122.             $opt_keep = 'all';
  123.         } else {
  124.             die("Unknown option $arg" );
  125.         }
  126.     }
  127. }
  128. #
  129. # main()
  130. #
  131. cli_processing();
  132. check_oui_file();
  133. read_dhcpd_leases();
  134. process_leases();
  135. output_leases();


 
- Après un autre petit script qui exécute ce script et qui envoie la sortie de celui ci en mail:
 

Code :
  1. #!/bin/sh
  2. perl dhcp.perl > out.txt
  3. sleep 10
  4. mail -s "Baux DHCP" monadresse@mail.com < out.txt


 
Voila, c'est du bidouillage mais ça fonctionne bien :o si ça peut servir à quelqu'un  :hello:


---------------
Je suis pas Superman, je suis Super-vagabond, mais toi t’es Super-pomme. Tu es très gouteuse, tu es très... biologique, très naturelle ! Tu es la pomme de ma vie.
Reply

Marsh Posté le 06-04-2011 à 12:04:14    

perl [:suri_2002]  
 
Je le garde sous la main pour mon futur perso, merci :jap:


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 06-04-2011 à 15:37:24    

Je garde ça sous le coude aussi pour un problème dans ma boîte :)


---------------
Encore une victoire de canard !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed