ISC-DHCP:努力从 dhcp 脚本获取主机名

ISC-DHCP:努力从 dhcp 脚本获取主机名
  • 服务器操作系统:Ubuntu 12.0.4.1 LTS 服务器
  • 桌面操作系统:Ubuntu 12.0.4.1 LTS 和 Windows 7

我按照网上的一篇文章了解如何更新 powerdns 数据库。 ISC DHCP 和 PowerDNS 无论如何,我都在努力获取请求租约的客户端的主机名。当我查看以下行时,我可以从日志文件中看到 dhcp 服务器有它(在括号中):-

  • dhcpd:通过 eth0 从 00:1c:c0:1c:1e:84 (MINION) 向 192.168.0.90 发出 DHCPREQUEST
  • dhcpd:通过 eth0 在 192.168.0.90 上向 00:1c:c0:1c:1e:84 (MINION) 发送 DHCPACK

我的问题在于 host-decl-name 没有任何值,我原本以为它会保存 MINION,因为这是客户端的名称。我如何在 dhcpd.conf 执行中获取名称 MINION。顺便说一下,minion 是一台 Windows 7 机器。

我的dhcpd.conf:

ddns 更新样式无;
选项域名“butylseal.int”;
选项域名服务器 192.168.0.201, 192.168.0.202;
默认租用时间 600;
最大租赁时间7200;
权威性;
日志设施local7;

子网 192.168.0.0 网络掩码 255.255.255.0 {
   范围 192.168.0.1 192.168.0.99;
   选项路由器192.168.0.249;
   选项 netbios-name-servers 192.168.0.201;
   选项 netbios-node-type 8;
   提交时 {
      日志(“==============[开始提交]= ...
      log("主机名是:");
      日志(主机声明名称);
      设置ClientIP = 二进制到ASCII(10, 8,“。”,租用地址);
      设置 ClientMac = 二进制到 ASCII(16,8,“:”,子字符串(硬件,1,6));
      log(concat(“提交:IP:”,ClientIP,“Mac:”,ClientMac,“主机名:”,host-decl-name));
      执行(“/etc/dhcp/dhcp-event”,“commit”,ClientIP,ClientMac,host-decl-name);
      日志(“=============[结束提交]= ...
   }
   发布时 {
      log(“=============[开始发布]= ...
      设置ClientIP = 二进制到ASCII(10, 8,“。”,租用地址);
      设置 ClientMac = 二进制到 ASCII(16,8,“:”,子字符串(硬件,1,6));
      log(concat("发布:IP:",ClientIP," Mac:",ClientMac,"主机名:",host-decl-name));
      执行(“/etc/dhcp/dhcp-event”,“release”,ClientIP,ClientMace,host-decl-name);
      log(“============[结束发布]= ...
   }
   到期时 {
      log(“============[开始到期]= ...
      设置ClientIP = 二进制到ASCII(10, 8,“。”,租用地址);
      设置 ClientMac = 二进制到 ASCII(16,8,":",子字符串(硬件,1,6));
      log(concat("到期:IP:",ClientIP," Mac:",ClientMac,"主机名:",host-decl-name));
      执行(“/etc/dhcp/dhcp-event”,“expiry”,ClientIP,ClientMac);
      log(“============[结束到期] === ...
   }
}

要执行的脚本:

#!/usr/bin/env python
导入 MySQLdb
导入操作系统、系统
导入打印
pp = pprint.PrettyPrinter()

mysql_host =“本地主机”
mysql_user = "mysqlUsr"
mysql_pass = "mySqlPass"
mysql_db =“mypdnsdb” 复制代码


如果 (len(sys.argv) > 1):
   命令 = sys.argv[1]
   客户端IP = sys.argv[2]
   客户端Mac = sys.argv[3]
   主机名 = sys.argv[4]
   如果命令==“提交”:
      pp.pprint(“提交”)
      f = open(“/tmp/leases”,“a”)
      s = “租用:%s 至 %s \n”%(客户端 IP,主机名)
      f.写入
      f.刷新()
      f.关闭()
      db = MySQLdb.connect(主机=mysql_host,用户=mysql_user,密码=mysql_pass,数据库=mysql_db)
      光标 = db.cursor()
      cursor.execute("插入记录 (domain_id,name,type,content,ttl,prio,change_date) 值 (%s,%s,%s,%s,%s,%s,UNIX_TIMESTAMP(NOW()))", [1,hostname,"A",clientIP,3600,0])
      游标.关闭()
      db.提交()
      db.close()
   elif 命令 == “释放”:
      pp.pprint(“发布”)
      f = open(“/tmp/leases”,“a”)
      s = “已发布:%s 来自 %\n”%(客户端 IP,主机名)
      f.写入
      f.刷新()
      f.关闭()
      db = MySQLdb.connect(主机=mysql_host,用户=mysql_user,密码=mysql_pass,数据库=mysql_db)
      光标 = db.cursor()
      cursor.execute("从内容 = %s 和名称 = %s 的记录中删除", [clientIP,hostname])
      db.提交()
      db.close()
   elif 命令 == “expiry”:
      pp.pprint(“到期”)
      f = open(“/tmp/leases”,“a”)
      s = “已过期:%s 来自 %s \n”%(客户端 IP,主机名)
      f.写入
      f.刷新()
      f.关闭()
      db = MySQLdb.connect(主机=mysql_host,用户=mysql_user,密码=mysql_pass,数据库=mysql_db)
      光标 = db.cursor()
      cursor.execute("从内容 = %s 和名称 = %s 的记录中删除", [clientIP,hostname])
      db.提交()
      db.close()

谢谢马克
·霍兰德

答案1

我认为“pick-first-value”可以帮到你。你可以这样做:set clientName = pick-first-value ( option fqdn.hostname, option host-name );

相关内容