查看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.进行查询。(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 以及其状态:

,

语法:

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

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

标签: