- 服务器操作系统: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 );