Net::Address::IPv4::Local - A class for discovering the local system's IP


Net-Address-IPv4-Local documentation Contained in the Net-Address-IPv4-Local distribution.

Index


Code Index:

NAME

Top

Net::Address::IPv4::Local - A class for discovering the local system's IP address

VERSION

Top

0.12

SYNOPSIS

Top

    use Net::Address::IPv4::Local;

    # Get the local system's IP address that is "connected" to "the internet":
    my $address = Net::Address::IPv4::Local->public;

    # Get the local system's IP address that is "connected" to the given remote
    # IP address:
    my $address = Net::Address::IPv4::Local->connected_to($remote_address);

DESCRIPTION

Top

Net::Address::IPv4::Local discovers the local system's IP address that would be used as the source address when contacting "the internet" or a certain specified remote IP address.

Instance methods

This class just provides the following instance methods:

public: RETURNS SCALAR; THROWS Net::Address::IPv4::Local::Error

Returns the textual representation of the local system's IP address that is "connected" to "the internet".

connected_to($remote_address): RETURNS SCALAR; THROWS Net::Address::IPv4::Local::Error

Returns the textual representation of the local system's IP address that is "connected" to the given remote IP address.

AVAILABILITY and SUPPORT

Top

The latest version of Net::Address::IPv4::Local is available on CPAN and at http://www.mehnle.net/software/net-address-ipv4-local.

Support is usually (but not guaranteed to be) given by the author, Julian Mehnle <julian@mehnle.net>.

AUTHOR and LICENSE

Top

Net::Address::IPv4::Local is Copyright (C) 2005 Julian Mehnle <julian@mehnle.net>.

Net::Address::IPv4::Local is free software. You may use, modify, and distribute it under the same terms as Perl itself, i.e. under the GNU GPL or the Artistic License.


Net-Address-IPv4-Local documentation Contained in the Net-Address-IPv4-Local distribution.
#
# Net::Address::IPv4::Local class,
# a class for discovering the local system's IP address.
#
# (C) 2005 Julian Mehnle <julian@mehnle.net>
# $Id: Local.pm,v 1.4 2005/05/05 12:57:28 julian Exp $
#
##############################################################################

package Net::Address::IPv4::Local;

our $VERSION = '0.12';

use warnings;
use strict;

use Error qw(:try);

use IO::Socket::INET;

use constant DEFAULT_REMOTE_ADDRESS => '198.41.0.4';    # a.root-servers.net
use constant DEFAULT_REMOTE_PORT    => 53;              # DNS

# Interface:
##############################################################################

sub public;
sub connected_to;

# Implementation:
##############################################################################

sub public {
    my ($class) = @_;
    return $class->connected_to(DEFAULT_REMOTE_ADDRESS);
}

sub connected_to {
    my ($class, $remote_address) = @_;
    
    my $socket = IO::Socket::INET->new(
        Proto       => 'udp',
        PeerAddr    => $remote_address,
        PeerPort    => DEFAULT_REMOTE_PORT
    );
    
    throw Net::Address::IPv4::Local::Error("Unable to create UDP socket: $!")
        if not defined($socket);
    
    return inet_ntoa($socket->sockaddr);
}

package Net::Address::IPv4::Local::Error;
use base qw(Error::Simple);

package Net::Address::IPv4::Local;

1;

# vim:tw=79