|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
|
|
|
# This is an easier to read list of IPs and optional other details about the local network.
|
|
|
|
# When called without '--detailed', it shows interfaces with IPs and their MAC addresses. When called with
|
|
|
|
# '--detailed', it shows all interfaces, including their MTU and TX/RX data.
|
|
|
|
#
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use Anvil::Tools;
|
|
|
|
use Data::Dumper;
|
|
|
|
|
|
|
|
$| = 1;
|
|
|
|
|
|
|
|
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
|
|
|
|
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
|
|
|
|
if (($running_directory =~ /^\./) && ($ENV{PWD}))
|
|
|
|
{
|
|
|
|
$running_directory =~ s/^\./$ENV{PWD}/;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $anvil = Anvil::Tools->new();
|
|
|
|
|
|
|
|
$anvil->data->{switches}{detailed} = 0;
|
|
|
|
$anvil->Get->switches();
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"switches::detailed" => $anvil->data->{switches}{detailed},
|
|
|
|
}});
|
|
|
|
|
|
|
|
$anvil->Database->connect();
|
|
|
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0132"});
|
|
|
|
if (not $anvil->data->{sys}{database}{connections})
|
|
|
|
{
|
|
|
|
# No databases, exit.
|
|
|
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, priority => "err", key => "error_0359"});
|
|
|
|
$anvil->nice_exit({exit_code => 1});
|
|
|
|
}
|
|
|
|
|
|
|
|
$anvil->data->{display}{lines} = [];
|
|
|
|
collect_data($anvil);
|
|
|
|
show_data($anvil);
|
|
|
|
|
|
|
|
# Show the results
|
|
|
|
foreach my $line (@{$anvil->data->{display}{lines}})
|
|
|
|
{
|
|
|
|
print $line."\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
$anvil->nice_exit({exit_code => 0});
|
|
|
|
|
|
|
|
|
|
|
|
#############################################################################################################
|
|
|
|
# Functions #
|
|
|
|
#############################################################################################################
|
|
|
|
|
|
|
|
sub collect_data
|
|
|
|
{
|
|
|
|
my ($anvil) = @_;
|
|
|
|
|
|
|
|
# Call ip
|
|
|
|
$anvil->Network->get_ips({debug => 2});
|
|
|
|
|
|
|
|
my $short_host_name = $anvil->Get->short_host_name();
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { short_host_name => $short_host_name }});
|
|
|
|
|
|
|
|
$anvil->data->{longest}{interface} = 0;
|
|
|
|
$anvil->data->{longest}{ip_address} = 0;
|
|
|
|
$anvil->data->{longest}{subnet_mask} = 0;
|
|
|
|
$anvil->data->{longest}{mac_address} = 0;
|
|
|
|
$anvil->data->{longest}{gateway_string} = 0;
|
|
|
|
$anvil->data->{longest}{gateway_string} = 0;
|
|
|
|
$anvil->data->{longest}{tx_string} = 0;
|
|
|
|
$anvil->data->{longest}{rx_string} = 0;
|
|
|
|
$anvil->data->{longest}{dns_string} = 0;
|
|
|
|
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{$short_host_name}{interface}})
|
|
|
|
{
|
|
|
|
my $ip_address = $anvil->data->{network}{$short_host_name}{interface}{$interface}{ip};
|
|
|
|
my $subnet_mask = $anvil->data->{network}{$short_host_name}{interface}{$interface}{subnet_mask};
|
|
|
|
my $mac_address = $anvil->data->{network}{$short_host_name}{interface}{$interface}{mac_address};
|
|
|
|
my $mtu = $anvil->data->{network}{$short_host_name}{interface}{$interface}{mtu};
|
|
|
|
my $default_gateway = $anvil->data->{network}{$short_host_name}{interface}{$interface}{default_gateway};
|
|
|
|
my $gateway = $anvil->data->{network}{$short_host_name}{interface}{$interface}{gateway};
|
|
|
|
my $dns = $anvil->data->{network}{$short_host_name}{interface}{$interface}{dns};
|
|
|
|
my $tx_bytes = $anvil->data->{network}{$short_host_name}{interface}{$interface}{tx_bytes};
|
|
|
|
my $rx_bytes = $anvil->data->{network}{$short_host_name}{interface}{$interface}{rx_bytes};
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"s01:interface" => $interface,
|
|
|
|
"s02:ip_address" => $ip_address,
|
|
|
|
"s03:subnet_mask" => $subnet_mask,
|
|
|
|
"s04:mac_address" => $mac_address,
|
|
|
|
"s05:mtu" => $mtu,
|
|
|
|
"s06:default_gateway" => $default_gateway,
|
|
|
|
"s07:gateway" => $gateway,
|
|
|
|
"s08:dns" => $dns,
|
|
|
|
"s09:tx_bytes" => $tx_bytes,
|
|
|
|
"s10:rx_bytes" => $rx_bytes,
|
|
|
|
}});
|
|
|
|
|
|
|
|
if ((not $ip_address) && not ($anvil->data->{switches}{detailed}))
|
|
|
|
{
|
|
|
|
next;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $say_is_dg = $default_gateway ? "*" : " ";
|
|
|
|
my $say_gateway = $gateway ? $gateway.$say_is_dg : " ".$say_is_dg;
|
|
|
|
my $say_tx = $anvil->Convert->bytes_to_human_readable({'bytes' => $tx_bytes});
|
|
|
|
my $say_rx = $anvil->Convert->bytes_to_human_readable({'bytes' => $rx_bytes});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"s1:say_gateway" => $say_gateway,
|
|
|
|
"s2:say_is_dg" => $say_is_dg,
|
|
|
|
"s3:tx_bytes" => $say_tx,
|
|
|
|
"s4:rx_bytes" => $say_rx,
|
|
|
|
}});
|
|
|
|
|
|
|
|
$anvil->data->{interface_data}{$interface}{ip_address} = $ip_address;
|
|
|
|
$anvil->data->{interface_data}{$interface}{subnet_mask} = $subnet_mask;
|
|
|
|
$anvil->data->{interface_data}{$interface}{mac_address} = $mac_address;
|
|
|
|
$anvil->data->{interface_data}{$interface}{gateway_string} = $say_gateway;
|
|
|
|
$anvil->data->{interface_data}{$interface}{tx_string} = $say_tx;
|
|
|
|
$anvil->data->{interface_data}{$interface}{rx_string} = $say_rx;
|
|
|
|
$anvil->data->{interface_data}{$interface}{dns_string} = $dns;
|
|
|
|
|
|
|
|
if (length($interface) > $anvil->data->{longest}{interface})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{interface} = length($interface);
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::interface" => $anvil->data->{longest}{interface},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{ip_address}) > $anvil->data->{longest}{ip_address})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{ip_address} = length($anvil->data->{interface_data}{$interface}{ip_address});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::ip_address" => $anvil->data->{longest}{ip_address},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{subnet_mask}) > $anvil->data->{longest}{subnet_mask})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{subnet_mask} = length($anvil->data->{interface_data}{$interface}{subnet_mask});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::subnet_mask" => $anvil->data->{longest}{subnet_mask},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{mac_address}) > $anvil->data->{longest}{mac_address})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{mac_address} = length($anvil->data->{interface_data}{$interface}{mac_address});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::mac_address" => $anvil->data->{longest}{mac_address},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{gateway_string}) > $anvil->data->{longest}{gateway_string})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{gateway_string} = length($anvil->data->{interface_data}{$interface}{gateway_string});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::gateway_string" => $anvil->data->{longest}{gateway_string},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{tx_string}) > $anvil->data->{longest}{tx_string})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{tx_string} = length($anvil->data->{interface_data}{$interface}{tx_string});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::tx_string" => $anvil->data->{longest}{tx_string},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{rx_string}) > $anvil->data->{longest}{rx_string})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{rx_string} = length($anvil->data->{interface_data}{$interface}{rx_string});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::rx_string" => $anvil->data->{longest}{rx_string},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($anvil->data->{interface_data}{$interface}{dns_string}) > $anvil->data->{longest}{dns_string})
|
|
|
|
{
|
|
|
|
$anvil->data->{longest}{dns_string} = length($anvil->data->{interface_data}{$interface}{dns_string});
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"longest::dns_string" => $anvil->data->{longest}{dns_string},
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub show_data
|
|
|
|
{
|
|
|
|
my ($anvil) = @_;
|
|
|
|
|
|
|
|
my $interface_header = $anvil->Words->string({key => "header_0082"});
|
|
|
|
my $longest_interface = length($interface_header) > $anvil->data->{longest}{interface} ? length($interface_header) : $anvil->data->{longest}{interface};
|
|
|
|
my $ip_address_header = $anvil->Words->string({key => "header_0025"});
|
|
|
|
my $longest_ip_address = length($ip_address_header) > $anvil->data->{longest}{ip_address} ? length($ip_address_header) : $anvil->data->{longest}{ip_address};
|
|
|
|
my $subnet_mask_header = $anvil->Words->string({key => "striker_0025"});
|
|
|
|
my $longest_subnet_mask = length($subnet_mask_header) > $anvil->data->{longest}{subnet_mask} ? length($subnet_mask_header) : $anvil->data->{longest}{subnet_mask};
|
|
|
|
my $mac_address_header = $anvil->Words->string({key => "header_0002"});
|
|
|
|
my $longest_mac_address = length($mac_address_header) > $anvil->data->{longest}{mac_address} ? length($mac_address_header) : $anvil->data->{longest}{mac_address};
|
|
|
|
my $gateway_header = $anvil->Words->string({key => "header_0083"});
|
|
|
|
my $longest_gateway_string = length($gateway_header) > $anvil->data->{longest}{gateway_string} ? length($gateway_header) : $anvil->data->{longest}{gateway_string};
|
|
|
|
my $tx_header = $anvil->Words->string({key => "header_0084"});
|
|
|
|
my $longest_tx_string = length($tx_header) > $anvil->data->{longest}{tx_string} ? length($tx_header) : $anvil->data->{longest}{tx_string};
|
|
|
|
my $rx_header = $anvil->Words->string({key => "header_0085"});
|
|
|
|
my $longest_rx_string = length($rx_header) > $anvil->data->{longest}{rx_string} ? length($rx_header) : $anvil->data->{longest}{rx_string};
|
|
|
|
my $dns_header = $anvil->Words->string({key => "striker_0037"});
|
|
|
|
my $longest_dns_string = length($dns_header) > $anvil->data->{longest}{dns_string} ? length($dns_header) : $anvil->data->{longest}{dns_string};
|
|
|
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
|
|
|
"s1:longest_interface" => $longest_interface,
|
|
|
|
"s2:longest_ip_address" => $longest_ip_address,
|
|
|
|
"s3:longest_subnet_mask" => $longest_subnet_mask,
|
|
|
|
"s4:longest_mac_address" => $longest_mac_address,
|
|
|
|
"s5:longest_gateway_string" => $longest_gateway_string,
|
|
|
|
}});
|
|
|
|
|
|
|
|
# Interface
|
|
|
|
my $break_line = "+-".sprintf("%0${longest_interface}d", 0);
|
|
|
|
my $header_line = "| ".sprintf("%-${longest_interface}s", $interface_header);
|
|
|
|
|
|
|
|
# IP Address
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_ip_address}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_ip_address}s", $ip_address_header);
|
|
|
|
|
|
|
|
# Subnet Mask
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_subnet_mask}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_subnet_mask}s", $subnet_mask_header);
|
|
|
|
|
|
|
|
# MAC Address
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_mac_address}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_mac_address}s", $mac_address_header);
|
|
|
|
|
|
|
|
if ($anvil->data->{switches}{detailed})
|
|
|
|
{
|
|
|
|
# (DG) Gateway
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_gateway_string}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_gateway_string}s", $gateway_header);
|
|
|
|
|
|
|
|
# Transmitted
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_tx_string}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_tx_string}s", $tx_header);
|
|
|
|
|
|
|
|
# Received
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_rx_string}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_rx_string}s", $rx_header);
|
|
|
|
|
|
|
|
# DNS
|
|
|
|
$break_line .= "-+-".sprintf("%0${longest_dns_string}d", 0);
|
|
|
|
$header_line .= " | ".sprintf("%-${longest_dns_string}s", $dns_header);
|
|
|
|
}
|
|
|
|
$break_line .= "-+";
|
|
|
|
$header_line .= " |";
|
|
|
|
|
|
|
|
$break_line =~ s/0/-/g;
|
|
|
|
push @{$anvil->data->{display}{lines}}, $break_line;
|
|
|
|
push @{$anvil->data->{display}{lines}}, $header_line;
|
|
|
|
push @{$anvil->data->{display}{lines}}, $break_line;
|
|
|
|
|
|
|
|
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{interface_data}})
|
|
|
|
{
|
|
|
|
my $ip_address = $anvil->data->{interface_data}{$interface}{ip_address};
|
|
|
|
my $subnet_mask = $anvil->data->{interface_data}{$interface}{subnet_mask};
|
|
|
|
my $mac_address = $anvil->data->{interface_data}{$interface}{mac_address};
|
|
|
|
my $gateway_string = $anvil->data->{interface_data}{$interface}{gateway_string};
|
|
|
|
my $tx_string = $anvil->data->{interface_data}{$interface}{tx_string};
|
|
|
|
my $rx_string = $anvil->data->{interface_data}{$interface}{rx_string};
|
|
|
|
my $dns_string = $anvil->data->{interface_data}{$interface}{dns_string};
|
|
|
|
|
|
|
|
my $interface_line = "| ".sprintf("%-${longest_interface}s", $interface);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_ip_address}s", $ip_address);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_subnet_mask}s", $subnet_mask);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_mac_address}s", $mac_address);
|
|
|
|
if ($anvil->data->{switches}{detailed})
|
|
|
|
{
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_gateway_string}s", $gateway_string);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_tx_string}s", $tx_string);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_rx_string}s", $rx_string);
|
|
|
|
$interface_line .= " | ".sprintf("%-${longest_dns_string}s", $dns_string);
|
|
|
|
}
|
|
|
|
$interface_line .= " |";
|
|
|
|
|
|
|
|
push @{$anvil->data->{display}{lines}}, $interface_line;
|
|
|
|
}
|
|
|
|
|
|
|
|
push @{$anvil->data->{display}{lines}}, $break_line;
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|