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

Resolving DNS of local network

by IB2017 (Pilgrim)
on Jan 23, 2018 at 10:06 UTC ( [id://1207736]=perlquestion: print w/replies, xml ) Need Help??

IB2017 has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks, first of all I have to admit something: Networks and the like are almost a tabu for myself. However, I am in need to now the DNS name (I guess this is how it is called) of the network in which my computer is. If my computer is connected to the network of the Princeton University, for example, I want to get: princeton.edu.

After some experimenting, I came out with the following script which seems to work. However it looks like I am moving in a circle, going forth and back between IP, DNS, etc. This means I am very unhappy with the result. What would be a better way to achieve my goal?

#!/usr/bin/env perl use strict; use warnings; use Sys::Hostname; use Socket; my($host)=gethostbyname(hostname); my($addr)=inet_ntoa((gethostbyname(hostname))[4]); my $name = gethostbyaddr(inet_aton($addr), AF_INET) or die "Can't resolve $addr: $!\n"; $name=~s/($host\.)//g; print "DSN of network in which I am now: $name\n";

Replies are listed 'Best First'.
Re: Resolving DNS of local network
by marto (Cardinal) on Jan 23, 2018 at 10:20 UTC

    Net::Domain provides the hostdomain which seems to be what you are looking for:

    #!/usr/bin/perl use strict; use warnings; use feature 'say'; use Net::Domain qw(hostdomain); say hostdomain;

      Perfect!

        Glad it was of help, I also should have mentioned it's been a core module for a long time.

        > corelist Net::Domain Net::Domain was first released with perl v5.7.3 > perldoc perlhist | grep 5.7.3 | head -1 5.7.3 2002-Mar-05`
Re: Resolving DNS of local network
by Anonymous Monk on Jan 23, 2018 at 14:15 UTC
    Glad it seems to be working for you but do take a peek at the source-code of that module's implementation. A Perl program could find itself on an internal network – therefore with a non-public, non-routable IP address – and sometimes that IP does not have a public gateway that it can reach. The internal IP might well not correspond to any external IP address at all. There is no "generalized solution" to this question; sometimes, it cannot be answered.

      Hello IB2017,

      I agree with fellow Monk Anonymous Monk. You could use something like that:

      #!/usr/bin/perl use strict; use warnings; use feature 'say'; use Net::Domain qw( hostfqdn hostdomain ); if (my $hostdomain = hostdomain) { say $hostdomain; } else { my $hostfqdn = hostfqdn; say $hostfqdn; }

      Where you can get use the hostfqdn() method and you can identify and return the FQDN of the current host. By doing so you will get all public information at least. You can read more at the documentation Net::Domain.

      Hope this helps, BR.

      Seeking for Perl wisdom...on the process of learning...not there...yet!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1207736]
Front-paged by haukex
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2024-04-16 17:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found