/usr/bin/pcapinfo is in libnet-pcap-perl 0.18-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | #!/usr/bin/perl
use strict;
use warnings;
use Net::Pcap ':functions';
use Sys::Hostname;
my $has_io_interface = eval "use IO::Interface::Simple ':flags'; 1" || 0;
my(%devs, $err) = ();
my @devs = findalldevs(\%devs, \$err);
my $hostname = hostname();
my $aliases = (gethostbyname($hostname))[1];
print "Host information\n",
"----------------\n",
" Hostname : $hostname\n";
print " Aliases : $aliases\n" if $aliases;
print " Pcap version : ", lib_version(), $/,
$/,
"Devices information\n",
"-------------------\n";
for my $dev (@devs) {
my $default = $dev eq lookupdev(\$err) ? "(default)" : '';
print "Device $dev $default\n",
" Description : $devs{$dev}\n";
print " Link type : ", linktype($dev), $/
if $dev ne "any";
if ($has_io_interface) {
my $iface = IO::Interface::Simple->new($dev);
if (defined $iface) {
print " Hardware address : ", $iface->hwaddr, $/ if $iface->hwaddr;
print " Network address : ", $iface->address, $/ if $iface->address;
print " Network mask : ", $iface->netmask, $/ if $iface->netmask;
print " Flags : ", flags($iface), $/;
}
}
print $/;
}
sub linktype {
my ($dev) = @_;
my $linktype = "<can't get this information>";
my $status = "";
if (my $pcap = open_live($dev, 1024, 1, 0, \$err)) {
$linktype = datalink_val_to_description(datalink($pcap));
pcap_close($pcap);
}
if (-e "/sbin/mii-tool") {
chomp($status = `/sbin/mii-tool $dev 2>/dev/null`);
$status =~ s/$dev\:/,/;
}
return $linktype . $status
}
sub flags {
my ($iface) = @_;
my $string = '';
$string .= "up " if $iface->flags & &IO::Interface::IFF_UP;
$string .= "running " if $iface->is_running;
$string .= "broadcast " if $iface->is_broadcast;
$string .= "debug " if $iface->flags & &IO::Interface::IFF_DEBUG;
$string .= "loopback " if $iface->is_loopback;
$string .= "p-to-p " if $iface->is_pt2pt;
$string .= "notrailers " if $iface->is_notrailers;
$string .= "noarp " if $iface->is_noarp;
$string .= "promiscuous " if $iface->is_promiscuous;
$string .= "multicast " if $iface->is_multicast;
$string .= "allmulti " if $iface->flags & eval { &IO::Interface::IFF_ALLMULTI };
$string .= "master " if $iface->flags & eval { &IO::Interface::IFF_MASTER };
$string .= "slave " if $iface->flags & eval { &IO::Interface::IFF_SLAVE };
$string .= "portsel " if $iface->flags & eval { &IO::Interface::IFF_PORTSEL };
$string .= "automedia " if $iface->flags & eval { &IO::Interface::IFF_AUTOMEDIA };
return $string
}
__END__
=head1 NAME
pcapinfo - Prints detailed information about the network devices
=head1 SYNOPSIS
pcapinfo
=head1 OPTIONS
None.
=head1 DESCRIPTION
B<pcapinfo> prints detailed information about the network devices
and Pcap library available on the current host. Here is an example:
Host information
----------------
Hostname : fangorn.maddingue.net
Aliases : fangorn.local fangorn
Pcap version : libpcap version 0.8.3
Devices information
-------------------
Device eth0 (default)
Description : No description available
Link type : Ethernet, no autonegotiation, 10baseT-HD, link ok
Hardware address : 00:0c:6e:0a:c3:ca
Network address : 10.0.1.51
Network mask : 255.255.255.0
Flags : up running broadcast multicast
Device eth1
Description : No description available
Link type : Ethernet, no autonegotiation, 10baseT-HD, link ok
Hardware address : 00:26:54:0a:d8:4d
Network address : 192.168.1.51
Network mask : 255.255.255.0
Flags : up running broadcast multicast
The device marked as C<"(default)"> is the one returned when calling
C<Net::Pcap::lookupdev()>
Some information like the link type can only be gathered with administrative
privileges.
=head1 AUTHOR
SE<eacute>bastien Aperghis-Tramoni, E<lt>sebastien@aperghis.netE<gt>
=head1 COPYRIGHT
Copyright (C) 2005, 2006, 2007, 2008, 2009 SE<eacute>bastien Aperghis-Tramoni.
All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
|