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: -
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
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);