Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Answer: How do I get the local internet IP address?

( #704362=categorized answer: print w/ replies, xml ) Need Help??

Q&A > network programming > How do I get the local internet IP address? contributed by betterworld

This is probably the least portable version because it uses Linux-specific data structures, but for the fun of it and for completeness, I'll post it:

#!/usr/bin/perl use strict; use warnings; require 'sys/ioctl.ph'; use Socket; my %interfaces; my $max_addrs = 30; socket(my $socket, AF_INET, SOCK_DGRAM, 0) or die "socket: $!"; { my $ifreqpack = 'a16a16'; my $buf = pack($ifreqpack, '', '') x $max_addrs; my $ifconf = pack('iP', length($buf), $buf); # This does the actual work ioctl($socket, SIOCGIFCONF(), $ifconf) or die "ioctl: $!"; my $len = unpack('iP', $ifconf); substr($buf, $len) = ''; %interfaces = unpack("($ifreqpack)*", $buf); unless (keys(%interfaces) < $max_addrs) { # Buffer was too small $max_addrs += 10; redo; } } for my $addr (values %interfaces) { $addr = inet_ntoa((sockaddr_in($addr))[1]); } use Data::Dumper; print Dumper \%interfaces;

The output is:

$VAR1 = { 'eth0:1' => '10.153.26.128', 'eth0' => 'x.y.z.128', 'eth0:3' => '10.153.84.128', 'eth0:4' => '10.153.88.2', 'eth0:2' => 'x.y.z.62', 'lo' => '127.0.0.1' };

(I've stripped the public addresses.)

I've successfully tested it on Debian etch and sarge.

Comment on Answer: How do I get the local internet IP address?
Select or Download Code
Re: Answer: How do I get the local internet IP address?
by Krambambuli (Deacon) on Aug 15, 2008 at 09:02 UTC
    Works OK on Fedora 8 too.

    Krambambuli
Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2015-07-04 07:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (58 votes), past polls