linux下dhcp服务器分配出去的IP地址及剩余IP地址

我认为有2种办法

1。你可以查看防火墙信息,如图,可以清晰的看到,192.1681.200的IP给了哪个MAC地址

2. /var/lib/dhcpd/dhcpd.leases  这个文件专门记录了DHCP的分配情况

**************************************************************************************

作者 :ailms

版本 :v1.1

完成时间  :2008/02/02 0:28

**************************************************************************************


一、介绍

  由于 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. 进行查询。(v1.1)

  7、每月15日的0点10分自动把 lease 记录以 lease.record. 备份,所以意味着默认只能查15天内的数据 (v1.1)

  


二、限制

目前暂时不考虑 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. ,同时重启 lease_watch。

  
四、屏幕截图
  
   按 ip 选择:
  
  
  
  按 mac 选择 :
  
  
  
  按 hostname 选择:
  
  

  指定某个历史文件进行查询

  
  
  列出所有曾经被租用的 ip 以及其状态 :
  
  
  
  语法 :
  


  

http://carywu.blog.51cto.com/13185/61628

========================

从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 "\377eth0\000\001\000\001\016\354\015J\000\014)\254N\001";
}
 
 
# cat dhcpd.leases | egrep 'lease|hardware' | sed 's/lease//g' | sed 's/{//g' | sed 's/hardware ethernet//g
 
 
网友给的办法.测试了一下.重复的较多.主要是出现了.同一个MAC多次获取不同的IP地址的情况
在CU上找到更好的命令 [url]http://bbs.chinaunix.net/thread-980700-1-1.html[/url]
cat dhcpd.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; 
192.168.1.240 00:0c:29:a8:59:21; 
192.168.1.241 00:0c:29:ac:4e:01; 
192.168.1.242 00:0c:29:9d:e8:d8; 
192.168.1.243 00:0c:29:9d:e8:d8; 
192.168.1.244 00:0c:29:79:e2:aa; 
192.168.1.245 00:0c:29:79:e2:aa; 
192.168.1.246 00:0c:29:ac:4e:01; 
192.168.1.247 00:0a:eb:f3:39:dd; 
192.168.1.248 00:0c:29:ac:4e:01; 
192.168.1.249 00:0c:29:a8:c7:0a; 
192.168.1.250 00:0c:29:ac:4e:01; 
192.168.1.251 00:0c:29:05:ac:8a; 
192.168.1.252 00:0c:29:ac:4e:01; 
192.168.1.253 00:0c:29:c2:b3:44; 
192.168.1.254 00:0c:29:c2:b3:44;
如果只是单纯要IP或者MAC
列出IP
cat dhcpd.leases|grep -o '\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\>'
 
 
列出MAC
cat dhcpd.lease|grep -o '\<[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}\>' 

本文出自 “风吹云动” 博客,请务必保留此出处http://coolerfeng.blog.51cto.com/133059/58773

1.DHCP配置文件中的parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。主要内容见表1 

 参数< XMLNAMESPACE PREFIX ="O" />

解释

ddns-update-style

配置DHCP-DNS 互动更新模式。

default-lease-time

指定确省租赁时间的长度,单位是秒。

max-lease-time

指定最大租赁时间长度,单位是秒。

hardware

指定网卡接口类型和MAC地址。

server-name

通知DHCP客户服务器名称。

get-lease-hostnames flag

检查客户端使用的IP地址。

fixed-address ip

分配给客户端一个固定的地址。

authritative

拒绝不正确的IP地址的要求。

2. DHCP配置文件中的declarations (声明):用来描述网络布局、提供客户的IP地址等。主要内容见表2:

声明

解释

shared-network

用来告知是否一些子网络分享相同网络。

subnet

描述一个IP地址是否属于该子网。

range 起始IP 终止IP

提供动态分配IP 的范围。

host 主机名称

参考特别的主机。

group

为一组参数提供声明。

allow unknown-clients ﹔deny unknown-client

是否动态分配IP给未知的使用者。

allow bootp;deny bootp

是否响应激活查询。

allow booting﹔deny booting

是否响应使用者查询。

 

filename

开始启动文件的名称,应用于无盘工作站。

next-server

设置服务器从引导文件中装如主机名,应用于无盘工作站。



3. DHCP配置文件中的option(选项):用来配置DHCP可选参数,全部用option关键字作为开始,主要内容包括见表3: 

选项

解释

subnet-mask

为客户端设定子网掩码。

domain-name

为客户端指明DNS名字。

domain-name-servers

为客户端指明DNS服务器IP地址。

host-name

为客户端指定主机名称。

routers

为客户端设定默认网关。

broadcast-address

为客户端设定广播地址。

ntp-server

为客户端设定网络时间服务器IP地址。

ime-offset

为客户端设定和格林威治时间的偏移时间,单位是秒。

++++++++++++++++++++

rpm -qa | grep dhcpd   #查看主机是否安装dhcp包

# cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcpd.conf

/var/lib/dhcpd/dhcpd.leases为dhcp服务器和客户端租约建立的启动和到期时间的记录文件。

# cat /etc/dhcpd.conf

ddns-update-style none;                        #设置不要更新DDNS的设置

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地址

fixed-address ip 分配给客户端一个固定的地址

authritative 拒绝不正确的IP地址的要求

option(选项):用来配置DHCP可选参数,全部用option关键字作为开始

option routers:为客户端设定默认网关

option subnet-mask:为客户端设定子网掩码

option domain-name:为客户端指明DNS名字

option domain-name-servers:为客户端指明DNS服务器IP地址

option time-offset:为客户端设定和格林威治时间的偏移时间,单位是秒

option ntp-server:为客户端设定网络时间服务器IP地址

option host-name 为客户端指定主机名称。若客户端使用windows,不要选择host-name,即不要为其指定主机名称。

option broadcast-address 为客户端设定广播地址

declarations (声明):描述网络布局、提供客户的IP地址等

shared-network:告知是否一些子网络分享相同网络

subnet:描述一个IP地址是否属于该子网

range:起始IP 终止IP 提供动态分配IP 的范围

host:主机名称参考特别的主机

group:为一组参数提供声明

allow unknown-clients/deny unknown-client:是否动态分配IP给未知的使用者

allow bootp/deny bootp:是否响应激活查询

allow booting/deny booting:是否响应使用者查询

filename:开始启动文件的名称,应用于无盘工作站

next-server:设置服务器从引导文件中装如主机名,应用于无盘工作站。

配置文件修改完成后,#/usr/sbin/dhcpd即可运行dhcpd服务,如有错误则会将错误信息显示在屏幕上。可以通过netstat –unlt|grep 67查看dhcp的信息。也可以通过查看/var/log.messages查看dhcp的日志信息

DHCP客户端

  1. 配置网卡设置dhcp方式获取IP地址。
  2. 然后重启网卡获取IP地址,在服务器端可以查看/var/log/messages日志信息查看客户端是否在向DHCP客户端申请IP地址,可以查看/var/db/dhcp.leases查看租约申请记录。
  3. #/var/log/messages服务器端日志查看dhcp客户端申请IP地址的过程

Oct 5 21:50:39 master dhcpd: DHCPDISCOVER from 00:0c:29:54:6b:77 via eth0

Oct 5 21:50:39 master dhcpd: DHCPOFFER on 192.168.23.132 to 00:0c:29:54:6b:77 (win2003) via eth0

Oct 5 21:50:39 master dhcpd: DHCPREQUEST for 192.168.23.132 (192.168.23.254) from 00:0c:29:54:6b:77 (win2003) via eth0

Oct 5 21:50:39 master dhcpd: DHCPACK on 192.168.23.132 to 00:0c:29:54:6b:77 (win2003) via eth0

dhcpd.leases:

# cat /var/db/dhcpd.leases        #dhcp服务器和客户端租约建立的启动和到期时间的记录文件,仅在客户端申请IP地址之后才会有:

………………………………………………

lease 192.168.23.129 {                        #linux客户端申请IP地址

starts 2 2010/10/05 13:24:26;                # lease 开始租约时间

ends 2 2010/10/05 19:24:26;                # lease 结束租约时间

cltt 2 2010/10/05 13:24:26;

binding state active;

next binding state free;

hardware ethernet 00:0c:29:3e:1b:f2;        #客户机网卡MAC地址

}

server-duid "\000\001\000\001\024=\257w\000\014)\000[x";

lease 192.168.23.132 {                        #windows客户端申请ip地址

starts 2 2010/10/05 13:50:39;

ends 2 2010/10/05 19:50:39;

cltt 2 2010/10/05 13:50:39;

binding state active;

next binding state free;

hardware ethernet 00:0c:29:54:6b:77;

uid "\001\000\014)Tkw";                    #用来验证客户机的UID标示

client-hostname "win2003";                #客户机名称

}

注意:lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT),不是本地时间

Dhcp客户端重新获取IP地址:#dhclient eth0

你可能感兴趣的:(linux应用)