我想编写一个脚本来操作dhcp.conf文件。从某种意义上说,它必须读取文件并且它应该ping所有租约IP并且应该给出另一个文本文件,其中它应该给出IP列表,现在存在哪些设备。
编辑:谢谢你的快速回复。 dhcpd.conf文件是这样的lease 172.31.0.10 {
some text
some text1
}
lease 172.31.0.12 {
some text
some text1
}
lease 172.31.0.100 {
some text
some text1
}
所以首先我需要先提取ip地址,然后逐个提取
答案 0 :(得分:1)
首先,您需要注意两件事:
arping
代替
甚至会检测防火墙的PC。所以,这是一个例子:
lease 192.168.66.132 {
starts 4 2009/01/08 23:58:41;
ends 5 2009/01/09 00:00:41;
binding state free;
hardware ethernet 00:e0:81:28:2d:56;
}
lease 192.168.66.133 {
starts 5 2009/01/09 03:17:17;
ends 2 2038/01/19 03:14:06;
binding state active;
next binding state free;
hardware ethernet 00:e0:81:28:2d:57;
}
你可以看到132没有被使用(binding state free
)而133是
(binding state active
)。另一种可能性是binding state backup
,
但这只发生在故障转移配置中。
租约也可以放弃,这意味着DHCP服务器是 要分配该IP,但发现它已经在使用中(通过ping)。
dhcpd.leases(5)
中记录了这一切。
DHCP服务器已经重新使用过期的租约。有没有好处 你需要检查它的工作原因?如果你的时间不多了 租约,你考虑过降低租约时间吗?
nmap -sP <start_ip>-<end_ip>
能做你需要的吗?那也是
检测具有静态IP地址的计算机。
所以,鉴于上述情况,并假设你仍然想要这个,我会去 回答这个问题:
请写一个脚本来查找所有活动或租赁的租约 放弃并确定当前是否有使用该IP的机器 地址。
所以:
#!/usr/bin/perl
use File::Slurp qw(slurp);
use Data::Dump qw(pp);
use strict;
1 == @ARGV
or die "Usage: $0 dhpcd.leases\n";
my $leases = slurp($ARGV[0]);
$leases =~ s/^#.*\n//mg;
my @leases = split(/lease (\d.+\d.+\d.+\d+) {/, $leases);
shift @leases;
my %lease = @leases;
while (my ($ip, $rec) = each %lease) {
print $ip;
$rec =~ /^\s*abandoned;\s*$/m and print " abandoned";
$rec =~ /^\s*binding state free;\s*$/m and print " free";
$rec =~ /^\s*binding state active;\s*$/m and print " active";
print "\n";
}
这个相对丑陋的perl脚本会给你输出:
192.168.66.132 free
192.168.66.133 active
你应该很容易为arping提供食物。
答案 1 :(得分:0)
问题是,绑定状态有效; 并不意味着,设备处于活动状态。要确保设备处于活动状态,我们需要先ping设备。我们没有其他办法可以做到这一点