查看linux下dhcp服务器分配出去的IP地址及剩余IP地址
怎样查看linux 下dhcp 服务器分配出去的IP 地址及剩余IP 地址1。你可以查看防火墙信息,如图,可以清晰的看到,192.1681.200的IP 给了哪个MAC 地址2. /var/lib/d
怎样查看linux 下

dhcp 服务器分配出去的IP 地址及剩余IP 地址
1。你可以查看防火墙信息,如图,可以清晰的看到,192.1681.200的IP 给了哪个MAC 地址
2. /var/lib/dhcpd/dhcpd.leases这个文件专门记录了DHCP 的分配情况
一、介绍
由于 ISC DHCP 没有提供相应的统计工具,所以只能自己动手写一个。sourceforge.net 上也有很多,例如
QUOTE:
php DHCP hosts list : 一个php 脚本,用于列出一个 DHCP 服务器上的 host 信息
rogueDetect :发送一个“诱骗”作用的 DHCP DISCOVER ,并等待非权威的 DHCP 服务器消息,以找出未授权的 DHCP 服务器
phpDHCPAdmin :一个基于 web 界面的管理 DHCP 工具。有认证、错误检查、数据库驱动,简单易用
Analyzes of behavior of protocol DHCP :dhcpmap 能够“注入”和捕捉 DHCP 流量
dhcpphp :一个 PHP 脚本,用于显示一个 DHCP 服务器的 leases 记录
webDHCP :类似phpDHCPAdmin 的工具
DHCP lease parser :是一个简单的守护进程,它把 DHCP 服务器的 leases 状态的变化记录到一个数据库,以便历史查询。
同时该工具还提供了一个历史记录以供查询
,Lanloard DHCP lease tracker :一个 CGI 程序,用于跟踪 DHCP leases
ISC DHCP dhcpd.conf parser and editor :以一个友好的界面方便你编辑dhcpd.conf
DHCPdetector :用于检测网络上的 DHCP 服务,主要是为了找出 rogue DHCP
reportdhcp.pl :一个用于汇报 DHCP 统计信息的perl 脚本,需要启用 web 服务
所以俺也动手写了一个,功能比较简单,主要有:
1、查询某个 mac 的租用记录 (v1.0)
2、查询某个ip 地址的租用记录 (v1.0)
3、查询某个主机名的租用记录 (v1.0)
4、允许指定查询的开始时间和结束时间。开始时间默认为当天0点,结束时间默认为当前。(v1.0)
5、列出所有曾经被租用的ip 以及它们目前的状态 (v1.0)
6、许指定某个备份的lease.record.
7、每月15日的0点10分自动把 lease 记录以lease.record.
二、限制
目前暂时不考虑 DHCP Failover 以及 DHCP Omshell的分析(这两个东西都会在dhcpd.leases 中写数据)。
该脚本只记录客户机的 mac 、客户机的主机名(如果有的话)以及 lease 的开始/结束时间/状态。
由于环境所限,只有1台客户机可供测试,所以欢迎各位朋友多多指正
三、脚本组成
a ) lease_wath.sh ,主要是跟踪 /var/lib/dhcp/dhcpd.leases文件的输出,并固定输出到某个文件(默认是 /tmp/lease.record)。
,
每次只能启动一个

lease_watch.sh ,否则程序会报错(Error !Another lease_watch is running!)
b ) parse.sh :完成上述的功能的第1~6 项。
c ) rotate.sh :每月15日的0点10分自动把当前的 /tmp/lease.record备份为 /tmp/lease.record.
四、屏幕截图
按ip 选择:
按 mac 选择:
按 hostname 选择:
,

指定某个历史文件进行查询
列出所有曾经被租用的ip 以及其状态:
,

语法:
========================
从dhcpd.lease 中提取MAC 和IP 地址. 2008-01-10 22:17:26 从DHCP 的log 中提取MAC 和IP 地址.
/var/lib/dhcpd/dhcp.lease中的一段记录如下:
lease 192.168.1.238 {
starts 0 2007/11/25 11:57:41;
ends 0 2007/11/25 17:57:41;
tstp 0 2007/11/25 17:57:41;
binding state free;
,hardware ethernet 00:0c:29:ac:4e:01;
uid "77eth001016545J04)4N1";
}
# catdhcpd.leases | egrep 'lease|hardware' | sed 's/lease//g' | sed 's/{//g' | s ed 's/hardware ethernet//g
网友给的办法. 测试了一下. 重复的较多. 主要是出现了. 同一个MAC 多次获取不同的IP 地址的情况 在CU 上找到更好的命令[url]http://bbs.chinaunix.net/thread-980700-1-1.html[/url]
catdhcpd.leases|awk 'BEGIN{RS=ORS="}"}{print $2,$21,"n"}'
或者
awk 'BEGIN{RS=ORS="}"}{print $2,$21,"n"}' dhcpd.leases
解释:
RS 输入的记录他隔符新行
ORS 输出的记录分隔符新行
从头查找, 遇到}结束, 显示第2和第21个字段.ip 在第2个字段.mac 在第21个字段.
这样出来的结果基本符合我们的要求.
All so
}192.168.1.250 00:0c:29:ac:4e:01;
}192.168.1.238 00:0c:29:ac:4e:01;
}192.168.1.241 00:0c:29:ac:4e:01;
}192.168.1.246 00:0c:29:ac:4e:01;
}192.168.1.248 00:0c:29:ac:4e:01;
}192.168.1.251 00:0c:29:05:ac:8a;
}192.168.1.253 00:0c:29:c2:b3:44;
}192.168.1.247 00:0a:eb:f3:39:dd;
}192.168.1.254 00:0c:29:c2:b3:44;
}192.168.1.249 00:0c:29:a8:c7:0a;
}192.168.1.245 00:0c:29:79:e2:aa;
}192.168.1.244 00:0c:29:79:e2:aa;
}192.168.1.243 00:0c:29:9d:e8:d8;
}192.168.1.240 00:0c:29:a8:59:21;
}192.168.1.242 00:0c:29:9d:e8:d8;
}192.168.1.239 00:16:d3:b6:1b:d2;
}
缺点就是第一行多了All so 每一行多了},也就是说我们要把这个结果再处理一下.
去掉第一行和最后一行, 并把它排序.
改进一下命令, 由于dhcpd.lease 前面7行都是注释的内容, 我们跳过这些行
tail -n 8 dhcpd.lease
从第8行开始显示dhcpd.lease 文件
#tail -n 8 dhcpd.leases|less|awk'BEGIN{RS=ORS="}"}{print $2,$21,"n"}' 192.168.1.252 00:0c:29:ac:4e:01;
}192.168.1.250 00:0c:29:ac:4e:01;
}192.168.1.238 00:0c:29:ac:4e:01;
,}192.168.1.241 00:0c:29:ac:4e:01;
}192.168.1.246 00:0c:29:ac:4e:01;
}192.168.1.248 00:0c:29:ac:4e:01;
}192.168.1.251 00:0c:29:05:ac:8a;
}192.168.1.253 00:0c:29:c2:b3:44;
}192.168.1.247 00:0a:eb:f3:39:dd;
}192.168.1.254 00:0c:29:c2:b3:44;
}192.168.1.249 00:0c:29:a8:c7:0a;
}192.168.1.245 00:0c:29:79:e2:aa;
}192.168.1.244 00:0c:29:79:e2:aa;
}192.168.1.243 00:0c:29:9d:e8:d8;
}192.168.1.240 00:0c:29:a8:59:21;
}192.168.1.242 00:0c:29:9d:e8:d8;
}192.168.1.239 00:16:d3:b6:1b:d2;
}
现在还有该死的},我们用sed 命令把它替换掉.
sed 's/}//g'
替换所有的}为空
#tail -n 8 dhcpd.leases|less|awk'BEGIN{RS=ORS="}"}{print $2,$21,"n"}'|sed 's/}//g'
192.168.1.252 00:0c:29:ac:4e:01;
192.168.1.250 00:0c:29:ac:4e:01;
192.168.1.238 00:0c:29:ac:4e:01;
192.168.1.241 00:0c:29:ac:4e:01;
192.168.1.246 00:0c:29:ac:4e:01;
192.168.1.248 00:0c:29:ac:4e:01;
192.168.1.251 00:0c:29:05:ac:8a;
192.168.1.253 00:0c:29:c2:b3:44;
192.168.1.247 00:0a:eb:f3:39:dd;
192.168.1.254 00:0c:29:c2:b3:44;
192.168.1.249 00:0c:29:a8:c7:0a;
192.168.1.245 00:0c:29:79:e2:aa;
192.168.1.244 00:0c:29:79:e2:aa;
192.168.1.243 00:0c:29:9d:e8:d8;
192.168.1.240 00:0c:29:a8:59:21;
192.168.1.242 00:0c:29:9d:e8:d8;
192.168.1.239 00:16:d3:b6:1b:d2;
我们再把结果排序一下, 让它看上去舒服一些.
#tail -n 8 dhcpd.leases|less|awk'BEGIN{RS=ORS="}"}{print $2,$21,"n"}'|sed 's/}//g'|sort -n
192.168.1.238 00:0c:29:ac:4e:01;
192.168.1.239 00:16:d3:b6:1b:d2;
,

subnet 192.168.23.0 netmask 255.255.255.0 { #定义网段IP 范围,须在本机所处网段范围内,{}内的信息表示此网段的配置信息
# --- default gateway
option routers 192.168.23.1; #设置客户端默认网关
option subnet-mask 255.255.255.0; #设置客户端子网掩码
option domain-name "domain.org"; #设置域名
option domain-name-servers 192.168.23.128; #设置网络内部DNS 服务器的IP 地址
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.23.129 192.168.23.254; #定义DHCP 地址池的服务范围,需排除静态地址 default-lease-time 21600; #设置默认租约时间
max-lease-time 43200; #设置最大租约时间
host ns { #设置静态IP 地址,用于网络内固定服务器IP ,不要置于定义好的DHCP 地址池范围内,否则会引起IP 冲突。
hardware ethernet 00:0C:29:00:5B:78; #设置静态主机的mac 地址,与IP 进行绑定
fixed-address 192.168.23.128;
}
}
配置/etc/dhcpd.conf
#为注释,除括号一行外,每行都应以;结尾,
设置的项目都具有独特的名称。形式为<参数代号><设置内容>,如default-time 20000
某些项目必须利用option 设置,形式为option<参数代码><设置内容>
DHCP 的ip 分为静态ip 和动态ip ,如果设置静态ip 需要知道要设置主机的MAC 地址,#ping 目标主机ip ,#arp –n 查看。
parameters (参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户 Defaults-lease-time :默认租约时间,默认单位为秒
Max-lease-time :最大租约时间,客户端超过租约但尚未更新IP 时,最长可以使用该IP 的时间 ddns-update-style 配置DHCP-DNS 互动更新模式
default-lease-time 指定确省租赁时间的长度,单位是秒
hardware 指定网卡接口类型和MAC 地址
server-name 通知DHCP 客户服务器名称
get-lease-hostnames flag 检查客户端使用的IP 地址