Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

grep ip address from dhcpd.leases file

by varalaxmibbnl (Acolyte)
on Dec 14, 2013 at 11:26 UTC ( #1067125=perlquestion: print w/ replies, xml ) Need Help??
varalaxmibbnl has asked for the wisdom of the Perl Monks concerning the following question:

hi monks i have a dhcp client to which server will be providing ip's which will be stored in /var/lib/dhcp3/dhcpd.leases file ...i need to grep all the ip's and client-hostname which are entering into that file and put into a database..can you please help me out to know is there any perl module to work on that...which makes my work easier and simple program to understand that module..thanks in advance...

Comment on grep ip address from dhcpd.leases file
Re: grep ip address from dhcpd.leases file
by ww (Bishop) on Dec 14, 2013 at 11:54 UTC
    Native function: perldoc -f grep
Re: grep ip address from dhcpd.leases file
by roboticus (Canon) on Dec 14, 2013 at 15:16 UTC

    varalaxmibbnl:

    ww already pointed you to the grep function, but as to the database functionality, I'd suggest AnyDBM_File if you just need to lookup records based on their IP, or DBI (along with a suitable DBD backend suitable for the database you may be using) if you need more advanced lookup/update/etc. capabilities.

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.

Re: grep ip address from dhcpd.leases file
by Kenosis (Priest) on Dec 14, 2013 at 17:19 UTC

    A lease record may not contain a client-hostname, so your file parsing should accommodate that. DB suggestions have been provided. Perhaps the following parsing option, which would read the file in lease-record 'chunks' (via local $/ = 'lease';), will be a helpful start:

    use strict; use warnings; local $/ = 'lease'; while (<DATA>) { my ($ip) = /\s+(\S+)\s+/ or next; my $client = /client-hostname\s+(".+")/ ? $1 : ''; print "$ip,$client\n"; } __DATA__ lease 192.168.20.4 { starts 6 2009/06/27 00:40:00; ends 6 2009/06/27 12:40:00; hardware ethernet 00:00:00:00:00:00; uid 00:00:00:00:00:00; client-hostname "examle-workstation1"; } lease 192.168.20.5 { starts 6 2009/06/27 00:40:00; ends 6 2009/06/27 12:40:00; hardware ethernet 00:00:00:00:00:00; } lease 192.168.20.6 { starts 6 2009/06/27 00:40:00; ends 6 2009/06/27 12:40:00; hardware ethernet 00:00:00:00:00:01; uid 00:00:00:00:00:01; client-hostname "examle-workstation2"; } lease 192.168.20.7 { starts 6 2009/06/27 00:40:00; ends 6 2009/06/27 12:40:00; hardware ethernet 01:00:00:00:00:00; }

    Output:

    192.168.20.4,"examle-workstation1" 192.168.20.5, 192.168.20.6,"examle-workstation2" 192.168.20.7,
      thanks for the reply..if i want to take the present ip address which are entering into that dhcp.leases then is there any module to do that...thanks in advance..

        Provided you have read permissions for dhcp.leases, just use that file as your data source in the above script:

        use strict; use warnings; local $/ = 'lease'; my $leaseFile = '/var/lib/dhcp3/dhcpd.leases'; open my $fh, '<', $leaseFile or die $!; while (<$fh>) { my ($ip) = /\s+(\S+)\s+/ or next; my $client = /client-hostname\s+(".+")/ ? $1 : ''; print "$ip,$client\n"; } close $fh;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1067125]
Approved by hdb
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2014-12-23 00:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (133 votes), past polls