Scanning DHCP Leases

This morning I added a machine to my network that I knew used DHCP and when it had booted I wanted to know what IP address it had been given. I run the ISC DHCP server so though it would be nice to have a script that would query the leases file (dhcpd.leases) and show all current leases. So, I wrote this script and thought I'd submit it as my first script here. Figure it might be useful if someone gets local file inclusion or some other way of nabbing the file off a server.

#!/usr/bin/env ruby
require "time"

f = File.new("dhcpd.leases", "r")

# init
ip = nil 
end_date = nil 
mac = nil 

while (line = f.gets)
    line.strip!
    if /^lease ((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) \{/.match line
        ip = $1
    end 
    if /ends [0-9]* ([^;]*);/.match line
        begin
            end_date = Time.parse($1)
            if (end_date <= Time.now)
                end_date = nil 
                ip = nil 
            end 
        rescue
        end 
    end 
    if /hardware ethernet ([0-9a-f:]{17});/i.match line
        mac = $1
    end 
    if line == "}" && !ip.nil? && !end_date.nil?
        print "Address: " + ip + " Valid till: " + end_date.strftime("%Y-%m-%d %H:%M:%S")
        if !mac.nil?
            print " MAC: " + mac 
        end 
        print "\n"
        # reset
        ip = nil 
        end_date = nil 
        mac = nil 
    end 
end

PS, I actually found the machine by an nmap ping scan and looking at the OUI field but was thinking of this script while I was running it