ISC-DHCP: Lutando para obter o nome do host do script dhcp

3
  • SO do servidor: Servidor LTS do Ubuntu 12.0.4.1
  • SO de desktop: Ubuntu 12.0.4.1 LTS e Windows 7

Eu segui um artigo na net sobre como atualizar um banco de dados powerdns. ISC DHCP e PowerDNS Como sempre estou lutando para obter o nome do host do cliente solicitando o contrato. Eu posso ver a partir do arquivo de log que o servidor dhcp tem (entre parênteses), quando olho para as linhas: -

  • dhcpd: DHCPREQUEST para 192.168.0.90 de 00: 1c: c0: 1c: 1e: 84 (MINION) via eth0
  • dhcpd: DHCPACK em 192.168.0.90 a 00: 1c: c0: 1c: 1e: 84 (MINION) via eth0

Meu problema está no fato de que host-decl-name não possui nenhum valor, eu teria pensado que ele seguraria MINION, já que esse é o nome do cliente. Como eu conseguiria o nome MINION na execução do dhcpd.conf? b.t.w. minion é uma máquina windows 7.

Meu dhcpd.conf:

ddns-update-style none;
option domain-name "butylseal.int";
option domain-name-servers 192.168.0.201, 192.168.0.202;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.1 192.168.0.99;
   option routers 192.168.0.249;
   option netbios-name-servers 192.168.0.201;
   option netbios-node-type 8;
   on commit {
      log("=============[ START COMMIT ]================");
      log("The host name is:");
      log(host-decl-name);
      set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
      set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 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("============[ END COMMIT ]==================");
   }
   on release {
      log("============[ START RELEASE ]===============");
      set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
      set ClientMac = binary-to-ascii(16, 8, ":", substring(hradware, 1, 6));
      log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac, "Hostname: ", host-decl-name));
      execute("/etc/dhcp/dhcp-event", "release", ClientIP, ClientMace, host-decl-name);
      log("===========[ END RELEASE ]==================");
   } 
   on expiry {
      log("===========[ START EXPIRY ]================");
      set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
      set ClientMac = binary-to-ascii(16, 8, ":" , substring(hardware, 1, 6));
      log(concat("Expiry: IP: ", ClientIP, " Mac: ", ClientMac, "Hostname: ", host-decl-name));
      execute("/etc/dhcp/dhcp-event", "expiry", ClientIP, ClientMac);
      log("===========[ END EXPIRY ] =================");
   }
}

o script a ser executado:

#!/usr/bin/env python
import MySQLdb
import os, sys
import pprint
pp = pprint.PrettyPrinter()

mysql_host = "localhost"
mysql_user = "mysqlUsr"
mysql_pass = "mySqlPass"
mysql_db = "mypdnsdb"


if (len(sys.argv) > 1):
   command = sys.argv[1]
   clientIP = sys.argv[2]
   clientMac = sys.argv[3]
   hostname = sys.argv[4]
   if command == "commit":
      pp.pprint("commit")
      f = open("/tmp/leases","a")
      s = "Leased: %s to %s\n" % (clientIP, hostname)
      f.write(s)
      f.flush()
      f.close()
      db = MySQLdb.connect(host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db)
      cursor = db.cursor()
      cursor.execute("INSERT INTO records (domain_id,name,type,content,ttl,prio,change_date) VALUES (%s,%s,%s,%s,%s,%s, UNIX_TIMESTAMP(NOW()))", [1,hostname,"A",clientIP,3600,0])
      cursor.close()
      db.commit()
      db.close()
   elif command == "release":
      pp.pprint("release")
      f = open("/tmp/leases","a")
      s = "Released: %s from %\n" % (clientIP, hostname)
      f.write(s)
      f.flush()
      f.close()
      db = MySQLdb.connect(host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db)
      cursor = db.cursor()
      cursor.execute("DELETE FROM records WHERE content = %s AND name = %s", [clientIP,hostname])
      db.commit()
      db.close()
   elif command == "expiry":
      pp.pprint("expiry")
      f = open("/tmp/leases","a")
      s = "Expired: %s from %s\n" % (clientIP, hostname)
      f.write(s)
      f.flush()
      f.close()
      db = MySQLdb.connect(host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db)
      cursor = db.cursor()
      cursor.execute("DELETE FROM records WHERE content = %s AND name = %s", [clientIP,hostname])
      db.commit()
      db.close()

obrigado a vocês Mark Hollander

    
por user108502 03.12.2012 / 14:54

1 resposta

4

Acho que "pick-first-value" pode ajudar você. Você pode fazer assim: set clientName = pick-primeiro-valor (opção fqdn.hostname, opção host-name);

    
por kron 25.01.2013 / 14:46

Tags