App-DHCPClientUtils
view release on metacpan or search on metacpan
scripts/network-interface-info.pl view on Meta::CPAN
#!/usr/bin/env perl
# vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab:
use Net::Interface qw(full_inet_ntop ipV6compress type :afs :iffs :iffIN6 :iftype :scope);
use Net::IP;
use Net::ISC::DHCPClient;
use POSIX qw();
use Getopt::Long;
use Pod::Usage;
use Data::Dumper;
use warnings;
use strict;
sub DisplayInterfaceInfo($)
{
my ($interfaces) = @_;
my @paths_to_attempt = ('/var/lib/dhclient', '/var/lib/dhcp', '/var/lib/NetworkManager');
for my $if (@$interfaces) {
my $info = $if->info();
my $flags = $if->flags();
next if (!$info->{Net::Interface->af_inet()});
print "interface = $if\n========================\n";
my $hwaddr = join(':', (length($info->{mac}) ? unpack('H*', $info->{mac}) : '') =~ m/../g);
$hwaddr = "none" if (!$hwaddr);
printf("hwaddr = %s\n", $hwaddr);
# Query DHCP-information (if any is available)
my $dhclient = Net::ISC::DHCPClient->new(
leases_path => \@paths_to_attempt,
interface => $if->{name},
af => ['inet', 'inet6']
);
# IPv4
my $ipv4_addrs = $info->{Net::Interface->af_inet()}->{number};
$ipv4_addrs = 0 if (!$ipv4_addrs);
printf("IPv4 addrs = %d\n", $ipv4_addrs);
my @v4addresses = $if->address(Net::Interface->af_inet());
my @v6addresses = $if->address(Net::Interface->af_inet6());
print " addr = ", Net::Interface::inet_ntoa($v4addresses[0]), "\n",
" broadcast = ", Net::Interface::inet_ntoa($if->broadcast(Net::Interface->af_inet())), "\n",
" netmask = ", Net::Interface::inet_ntoa($if->netmask(Net::Interface->af_inet())), "\n";
if ($dhclient->is_dhcp('inet')) {
my $lease = @{$dhclient->leases_af_inet()}[0];
print " gateway = ", $lease->option()->{routers}, " (from DHCP)\n";
}
print "IPv4 flags:\n";
print " is running\n" if $flags & IFF_RUNNING;
print " is broadcast\n" if $flags & IFF_BROADCAST;
print " is p-to-p\n" if $flags & IFF_POINTOPOINT;
print " is loopback\n" if $flags & IFF_LOOPBACK;
print " is promiscuous\n" if $flags & IFF_PROMISC;
print " is multicast\n" if $flags & IFF_MULTICAST;
print " is notrailers\n" if $flags & IFF_NOTRAILERS;
print " is noarp\n" if $flags & IFF_NOARP;
if ($dhclient->is_dhcp('inet')) {
print " is DHCP, ";
my $now = time();
my $lease = @{$dhclient->leases_af_inet()}[0];
if ($lease->expire >= $now) {
printf("lease will expire at: %s\n",
( run in 0.833 second using v1.01-cache-2.11-cpan-39bf76dae61 )