#!/usr/bin/perl -w use strict; eval { use IO::Interface; use IO::Socket; print head('IO::Interface'); my $s = IO::Socket::INET->new(Proto => 'udp'); for ($s->if_list) { print body('IO::I', $_, $s->if_addr($_), $s->if_netmask($_), $s->if_hwaddr($_)); } print foot('IO::Interface'); }; { use Net::Interface; print head('Net::Interface'); for (Net::Interface->interfaces) { no warnings; # Otherwise sprintf whines. print body('Net::I', $_->name, join('.', unpack "C4", $_->address), join('.', unpack "C4", $_->netmask), sprintf(("%02x:" x 5)."%02x", unpack "C6", $_->hwaddress)); } print foot('Net::Interface'); } { use Net::Ifconfig::Wrapper; print head('Net::Ifconfig::Wrapper'); my $ifs = Net::Ifconfig::Wrapper::Ifconfig('list'); for (keys %$ifs) { print body('N::I::W', $_, (keys %{$ifs->{$_}->{inet}})[0], (values %{$ifs->{$_}->{inet}})[0], $ifs->{$_}->{ether}, scalar keys %{$ifs->{$_}->{inet}}, ); } print foot('Net::Ifconfig::Wrapper'); } sub head { my $pkg = shift; sprintf "%18s %-30s %18s\n", '=' x 18, $pkg, '=' x 18; } sub foot { my $pkg = shift; sprintf "%s\n", "=" x 70; } sub body { my ($pkg, $if, $addr, $mask, $hw, $numint) = @_; $if ||= ''; $addr ||= ''; $mask ||= ''; $hw ||= ''; $numint ||= 1; sprintf "%-8s: %-6s (%15s/%15s) (%s) (%d)\n", $pkg, $if, $addr, $mask, $hw, $numint; }