web-dev-qa-db-fra.com

ISC-DHCP: Se battre pour obtenir le nom d'hôte à partir du script DHCP

  • Système d'exploitation serveur: serveur Ubuntu 12.0.4.1 LTS
  • OS de bureau: Ubuntu 12.0.4.1 LTS et Windows 7

J'ai suivi un article sur le net sur la façon de mettre à jour une base de données powerdns. ISC DHCP et PowerDNS Comment jamais je me bats pour obtenir le nom d'hôte du client demandant le bail. Je peux voir dans le fichier journal que le serveur DHCP l'a (entre parenthèses), quand je regarde les lignes: -

  • dhcpd: DHCPREQUEST pour 192.168.0.90 de 00: 1c: c0: 1c: 1e: 84 (MINION) via eth0
  • dhcpd: DHCPACK sur 192.168.0.90 à 00: 1c: c0: 1c: 1e: 84 (MINION) via eth0

Mon problème réside dans le fait que Host-decl-name ne détient aucune valeur, j'aurais pensé qu'il en serait de même pour MINION car c'est le nom du client. Comment pourrais-je obtenir le nom MINION dans l'exécution de dhcpd.conf. b.t.w. minion est une machine Windows 7.

Mon dhcpd.conf:

 ddns-update-style aucune; 
 option nom-domaine "butylseal.int"; 
 option nom-domaine-serveurs 192.168.0.201, 192.168.0.202; 
 durée de bail par défaut 600; 
 durée de bail maximale 7200; 
 faisant autorité; 
 log-facility local7; 
 
 sous-réseau 192.168. 0.0 masque de réseau 255.255.255.0 {
 Plage 192.168.0.1 192.168.0.99; 
 Option des routeurs 192.168.0.249; 
 Option des serveurs Netbios-name-192.168.0.201; 
 option netbios-node-type 8; 
 sur commit {
 log ("============= [START COMMIT] ========== ======= "); 
 log (" Le nom d'hôte est: "); 
 log (Host-decl-name); 
 set ClientIP = binary- to-ascii (10, 8, ".", adresse louée); 
 ensemble ClientMac = binaire-à-ascii (16, 8, ":", sous-chaîne (matériel, 1, 6)); 
 log (concat ("Commit: IP:", ClientIP, "Mac:", ClientMac, "Hostname:", Host-decl-name)); 
 execute ("/ etc/dhcp/dhcp-event "," commit ", ClientIP, ClientMac, Host-decl-name); [.___ _.] log ("============ [FIN COMMIT] ================="); 
} 
 à la libération {
 log ("============= [DÉMARRER LA LIBÉRATION] =============="); 
 set ClientIP = binaire-à-ascii (10, 8, ".", adresse louée); 
 set ClientMac = binaire-à-ascii (16, 8, ":", sous-chaîne ( hradware, 1, 6)); 
 log (concat ("Release: IP:", ClientIP, "Mac:", ClientMac, "Hostname:", Host-decl-name)); 
 execute ("/ etc/dhcp/dhcp-event", "release", ClientIP, ClientMace, nom de hôte/nom d'hôte); 
 log ("=========== [FIN RELEASE] ================== "); 
} 
 À l'expiration {log. 
 (" ===== ====== [START EXPIRY] ================ "); 
 A défini ClientIP = binaire vers ascii (10, 8,". " , loué-adresse); 
 définir ClientMac = binaire à ascii (16, 8, ":", sous-chaîne (matériel, 1, 6)); 
 log (concat ("Expiration: IP: ", ClientIP," Mac: ", ClientMac," Nom d'hôte: ", Nom d'hôte/nom d'hôte)); 
 Execute ("/etc/dhcp/dhcp-event "," expiration ", ClientIP, ClientMac); 
 Log (" =========== [EXPIRER FIN] ================ "); 
} 
} 
 

le script à exécuter:

 #!/usr/bin/env python 
 importer MySQLdb 
 importer os, sys 
 importer pprint 
 pp = pprint.PrettyPrinter () 
 
 mysql_Host = "localhost" 
 mysql_user = "mysqlUsr" 
 mysql_pass = "mySqlPass" 
 mysql_db = "mypdnsdb" 
 
 
 if (len (sys.argv)> 1): 
 commande = sys.argv [1] 
 clientIP = sys.argv [2] 
 clientMac = sys.argv [3] 
 nomhôte = sys.argv [4] 
 si commande == "commit": 
 pp.pprint ("commit") 
 f = open ("/ tmp/leases", "a") 
 s = "Loué:% s à% s\n"% (clientIP, nom d’hôte) 
 f. write (s) 
 f.flush () 
 f.close () 
 db = MySQLdb.connect (hôte = mysql_host, utilisateur = mysql_user, passewd = mysql_pass, db = mysql_db ) 
 cursor = db.cursor () 
 cursor.execute ("INSERT INTO records (id_domaine, nom, type, contenu, ttl, prio, changement_date) VALEURS (% s,% s,% s,% s,% s,% s, UNIX_TIMESTAMP (NOW ())) ", [1, nom d'hôte," A ", clientIP, 3600,0]) 
 cursor.close () 
 db.commit () 
 db.close () 
 Elif command == "release": 
 pp.pprint ("release") 
 f = open ("/ tmp/leases", "a") 
 s = "Relâché:% s à partir de%\n"% (clientIP, nom d’hôte) 
 f.write (s) 
 f.flush () 
 f.close () 
 db = MySQLdb.connect (hôte = mysql_Host, utilisateur = mysql_user, passwd = mysql_pass, db = mysql_db) 
 cursor = db.cursor () 
 cursor.execute ("DELETE FROM records WHERE content =% s ET nom =% s", [clientIP, nom d'hôte]) 
 db.commit () 
 db.close () 
 Elif command == "expiry": 
 pp.pprint ("expiry") 
 f = open ("/ tmp/leases", "a") 
 s = "Expiré:% s à partir de% s\n"% (clientIP, nom d'hôte) 
 f.write (s) 
 f.flush () 
 f.close () 
 db = MySQLdb.connect (hôte = mysql_host, utilisateur = mysql_user, passwd = mysql_pass, db = mysql_db) 
 curseur = db.cursor () 
 cursor.execute ("DELETE FROM records WHERE contenu =% s ET nom =% s", [clientIP, nom d'hôte]) 
 db.commit () 
 db.close () 
 

merci
Mark Hollander

3
user108502

Je pense que "pick-first-value" peut vous aider. Vous pouvez le faire de cette manière: set clientName = pick-first-value (option fqdn.hostname, option Host-name);

4
kron