Results 1 to 2 of 2

Thread: How To Find The Nameservers (DNS) of my computer

  1. #1

    Thread Starter
    New Member
    Join Date
    Jun 2005
    Posts
    13

    How To Find The Nameservers (DNS) of my computer

    Hello,

    Can someone help please, How to find the configured nameservers (primary DNS server, Secondary DNS server) on a computer, I caould not find any VB code for this, I just found some Perl module I think needs someone knows perl good called Net::DNS

    VB Code:
    1. package Net::DNS::Resolver::Win32;
    2. #
    3. # $Id: Win32.pm,v 2.100 2003/12/13 01:37:06 ctriv Exp $
    4. #
    5.  
    6. use strict;
    7. use vars qw(@ISA $VERSION);
    8.  
    9. use Net::DNS::Resolver::Base ();
    10.  
    11. @ISA     = qw(Net::DNS::Resolver::Base);
    12. $VERSION = (qw$Revision: 2.100 $)[1];
    13.  
    14. use Win32::Registry;
    15.  
    16. sub init {
    17.     my ($class) = @_;
    18.    
    19.     my $defaults = $class->defaults;
    20.    
    21.     my ($resobj, %keys);
    22.  
    23.     my $root = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters';
    24.     unless ($main::HKEY_LOCAL_MACHINE->Open($root, $resobj)) {
    25.         # Didn't work, maybe we are on 95/98/Me?
    26.         $root = 'SYSTEM\CurrentControlSet\Services\VxD\MSTCP';
    27.         $main::HKEY_LOCAL_MACHINE->Open($root, $resobj)
    28.             or Carp::croak "can't read registry: $!";
    29.     }
    30.  
    31.     $resobj->GetValues(\%keys)
    32.         or Carp::croak "can't read registry values: $!";
    33.  
    34.     # Best effort to find a useful domain name for the current host
    35.     # if domain ends up blank, we're probably (?) not connected anywhere
    36.     # a DNS server is interesting either...
    37.     my $domain = $keys{'Domain'}->[2] || $keys{'DhcpDomain'}->[2] || '';
    38.    
    39.     # If nothing else, the searchlist should probably contain our own domain
    40.     # also see below for domain name devolution if so configured
    41.     # (also remove any duplicates later)
    42.     my $searchlist = "$domain ";
    43.     $searchlist  .= $keys{'SearchList'}->[2];
    44.    
    45.     # This is (probably) adequate on NT4
    46.     my $nameservers = $keys{'NameServer'}->[2] || $keys{'DhcpNameServer'}->[2];
    47.     #
    48.     # but on W2K/XP the registry layout is more advanced due to dynamically
    49.     # appearing connections. So we attempt to handle them, too...
    50.     # opt to silently fail if something isn't ok (maybe we're on NT4)
    51.     # drop any duplicates later
    52.     my $dnsadapters;
    53.     $resobj->Open("DNSRegisteredAdapters", $dnsadapters);
    54.     if ($dnsadapters) {
    55.         my @adapters;
    56.         $dnsadapters->GetKeys(\@adapters);
    57.         foreach my $adapter (@adapters) {
    58.             my $regadapter;
    59.             $dnsadapters->Open($adapter, $regadapter);
    60.             if ($regadapter) {
    61.                 my($type,$ns);
    62.                 $regadapter->QueryValueEx("DNSServerAddresses", $type, $ns);
    63.                 while (length($ns) >= 4) {
    64.                     my $addr = join('.', unpack("C4", substr($ns,0,4,"")));
    65.                     $nameservers .= " $addr";
    66.                 }
    67.             }
    68.         }
    69.     }
    70.  
    71.     my $interfaces;
    72.     $resobj->Open("Interfaces", $interfaces);
    73.     if ($interfaces) {
    74.         my @ifacelist;
    75.         $interfaces->GetKeys(\@ifacelist);
    76.         foreach my $iface (@ifacelist) {
    77.             my $regiface;
    78.             $interfaces->Open($iface, $regiface);
    79.             if ($regiface) {
    80.                 my $ns;
    81.                 my $type;
    82.                 $regiface->QueryValueEx("NameServer", $type, $ns);
    83.                 $nameservers .= " $ns" if $ns;
    84.                 $regiface->QueryValueEx("DhcpNameServer", $type, $ns);
    85.                 $nameservers .= " $ns" if $ns;
    86.             }
    87.         }
    88.     }
    89.  
    90.     if ($domain) {
    91.         $defaults->{'domain'} = $domain;
    92.     }
    93.  
    94.     my $usedevolution = $keys{'UseDomainNameDevolution'}->[2];
    95.     if ($searchlist) {
    96.         # fix devolution if configured, and simultaneously make sure no dups (but keep the order)
    97.         my $i = 0;
    98.         my %h;
    99.         foreach my $entry (split(m/[\s,]+/, $searchlist)) {
    100.             $h{$entry} = $i++;
    101.             if ($usedevolution) {
    102.                 # as long there's more than two pieces, cut
    103.                 while ($entry =~ m#\..+\.#) {
    104.                     $entry =~ s#^[^\.]+\.(.+)$#$1#;
    105.                     $h{$entry} = $i++;
    106.                     }
    107.                 }
    108.             }
    109.         my @a;
    110.         $a[$h{$_}] = $_ foreach (keys %h);
    111.         $defaults->{'searchlist'} = \@a;
    112.     }
    113.  
    114.     if ($nameservers) {
    115.         # just in case dups were introduced...
    116.         my @a;
    117.         my %h;
    118.         foreach my $ns (split(m/[\s,]+/, $nameservers)) {
    119.             push @a, $ns unless $h{$ns};
    120.             $h{$ns} = 1;
    121.         }
    122.         $defaults->{'nameservers'} = \@a;
    123.     }
    124.  
    125.     $class->read_env;
    126.  
    127.     if (!$defaults->{'domain'} && @{$defaults->{'searchlist'}}) {
    128.         $defaults->{'domain'} = $defaults->{'searchlist'}[0];
    129.     } elsif (!@{$defaults->{'searchlist'}} && $defaults->{'domain'}) {
    130.         $defaults->{'searchlist'} = [ $defaults->{'domain'} ];
    131.     }
    132.  
    133.     $defaults->{'usevc'} = 1;
    134.     $defaults->{'tcp_timeout'} = undef;
    135. }
    136.  
    137. 1;
    138. __END__
    139.  
    140.  
    141. =head1 NAME
    142.  
    143. Net::DNS::Resolver::Win32 - Windows Resolver Class
    144.  
    145. =head1 SYNOPSIS
    146.  
    147.  use Net::DNS::Resolver;
    148.  
    149. =head1 DESCRIPTION
    150.  
    151. This class implements the windows specific portions of C<Net::DNS::Resolver>.
    152.  
    153. No user serviceable parts inside, see L<Net::DNS::Resolver|Net::DNS::Resolver>
    154. for all your resolving needs.
    155.  
    156. =head1 COPYRIGHT
    157.  
    158. Copyright (c) 1997-2002 Michael Fuhr.
    159.  
    160. Portions Copyright (c) 2002-2003 Chris Reinhardt.
    161.  
    162. All rights reserved.  This program is free software; you may redistribute
    163. it and/or modify it under the same terms as Perl itself.
    164.  
    165. =head1 SEE ALSO
    166.  
    167. L<perl(1)>, L<Net::DNS>, L<Net::DNS::Resolver>
    168.  
    169. =cut

  2. #2

    Thread Starter
    New Member
    Join Date
    Jun 2005
    Posts
    13

    Re: How To Find The Nameservers (DNS) of my computer

    Any idea?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width