> 
> Wonder if someone could help me, I am trying to write
> a script to pulls out all the machine names from a
> revese DNS file, some how, my script will only print
> out the machine names with 1.x.x.in-addr.arpa.... 
> 
> $nslookup = '/usr/local/bin/nslookup';
> $dig = '/usr/local/bin/dig';
> 
> @ZONES = qw/
>         1.x.x.in-addr.arpa
>         2.x.x.in-addr.arpa
>         3.x.x.in-addr.arpa
>         4.x.x.in-addr.arpa
>         /;
> 
> foreach $zone (@ZONES)
> {
> open (SOA, "$nslookup -timeout=3 -retry=1 -type=SOA
> $zone |") or die "Couldn't r
> un $nslookup -timeout=3 -retry=1 -type=SOA $zone";
> 
>   SOA: while (<SOA>)
>   {
>     chomp;

You don't need to chomp it, or you don't need $/ at 
last of the next line.

>     if (/^\S+.in-addr.arpa\s+nameserver = (\S+)$/)

You have to escape the . (ie: \.)

>     {
>       $soa=$1;
>       if (open(DIG, "$dig AXFR $zone \@$soa |"))
>       {
>         while (<DIG>)
>         {
>           chomp;
>           if (
> /\d+\s+1D\s+IN\s+\PTR\s+.+.this.is.my.domain./) 

escape the dots again.

>           {
>             ($host) = $_ =~
> /\d+\s+1D\s+IN\s+\PTR\s+(.+).this.is.my.domain./;

Are you trying to say :

$host = $1 if (/\d+\s+1D\s+IN\s+\PTR\s+(.+)\.this\.is\.my\.domain./);

$sth = $_ =~ m//; 

$sth will only be 1 if matched, or 'null' otherwise, 

>             push (@all_hosts, $host);
>           }
>         }
>         close (DIG);
>       last SOA;


So if DIG is successed one, the SOA while loop will be quit, is that 
what you want? I don't know.


>       }
>     }
>   }
>   close(SOA);
> }
> 

> 
> What have I done wrong?? 
> 

Not sure... coz I am not on a Linux box though =)
Perhaps the files have some problems too...
but 2 suggestions :

1. use strict and my.
2. Avoid to use Lable name same as Filehandle, 
get confuse easy.

Rgds,
Connie


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to