You may have to consider - as I did - *not* repairing Net::Libdnet; rather, rewriting some of your scripts to accommodate. Perhaps not ideal, but better than pushing water uphill. Since I'm not an expert coder and my efforts to get Net::Libdnet working didn't work - it was my only option.
Win32::Interfaces is in the PPC distribution on GitHub. It wasn't written as a replacement for Net::Libdnet, it was because Net::Libdnet, IO::Interfaces, etc. don't compile / work on Windows. So I took a lot of "functionality" from those modules and emulated it in the accessors for Win32::Interfaces pulling information from 'wmic', 'netsh' and other Windows system commands. It's not elegant, but it works.
Win32::Interfaces is pure Perl and can be installed "manually" by dropping the Interfaces.pm in your (...)/lib/Win32 folder. It has complete perldoc to get you started.
NAME
Win32::Interfaces - Win32 Network Adapter Interfaces
SYNOPSIS
use Win32::Interfaces;
my $interface = Win32::Interfaces->new('Wireless Network Connect
+ion');
printf "Name: %s\n", $interface->name;
printf "MAC: %s\n", $interface->mac;
printf "IPv4: %s\n", $interface->ipv4;
DESCRIPTION
Win32::Interfaces is a module to retrieve Windows interface adapte
+r
information (such as IP[v6] addresses, gateways, MAC, etc...). It
+is
implemented with system functions such as "wmic", "netsh" and "arp
+". A
better approach may be to use XS with "GetAdaptersAddresses()" and
+ parse
the "IP_ADAPTER_ADDRESSES" structure. Alas, that is proving diffic
+ult to
do.
This module was developed since I couldn't find an existing CPAN m
+odule
that handled this information specifically for Windows, let alone
+find
Win32 support in the many interface modules already on CPAN (see S
+EE
ALSO). The existing CPAN interface modules also used different API
+s so
finding a common interface for both Windows and *nix with all the
features was not possible.
This modules attempts to provide many of the API calls from *nix
interface modules specifically to Win32.
[...]
And a pretty extensive demonstration:
use strict;
use warnings;
use Win32::Interfaces;
# Assumes the existence of "Local Area Connection" interface as defaul
+t
my $W32interfaces = Win32::Interfaces->new();
my @interfaces = $W32interfaces->interfaces();
for my $if (@interfaces) {
my $interface = $W32interfaces->interface($if);
if (!defined($interface)) {
print Win32::Interfaces->error . "\n"
} else {
print "\n";
printf "Name: %s\n", $interface->name
+ if $interface->name;
printf "Description: %s\n", $interface->description
+ if $interface->description;
printf "Adapter: %s\n", $interface->adaptername
+ if $interface->adaptername;
printf "Device: %s\n", $interface->device
+ if $interface->device;
printf "ifIndex: %s\n", $interface->ifindex
+ if $interface->ifindex;
printf "MAC: %s\n", $interface->mac
+ if $interface->mac;
printf "IPv4: %s\n", $interface->ipv4
+ if $interface->ipv4;
printf "IPv4 netmask: %s\n", $interface->ipv4_netmask
+ if $interface->ipv4_netmask;
printf "IPv4 gateway: %s\n", $interface->ipv4_default_gate
+way if $interface->ipv4_default_gateway;
printf "IPv4 gateway MAC: %s\n", $interface->ipv4_gateway_mac
+ if $interface->ipv4_gateway_mac;
printf "IPv4 MTU: %s\n", $interface->ipv4_mtu
+ if $interface->ipv4_mtu;
printf "IPv6: %s\n", $interface->ipv6
+ if $interface->ipv6;
printf "IPv6 link-local: %s\n", $interface->ipv6_link_local
+ if $interface->ipv6_link_local;
# printf "IPv6 DHCPv6 IAID: %s\n", $interface->dhcpv6_iaid
+ if $interface->dhcpv6_iaid;
# printf "IPv6 DHCPv6 DUID: %s\n", $interface->dhcpv6_duid
+ if $interface->dhcpv6_duid;
printf "IPv6 gateway: %s\n", $interface->ipv6_default_gate
+way if $interface->ipv6_default_gateway;
printf "IPv6 gateway MAC: %s\n", $interface->ipv6_gateway_mac
+ if $interface->ipv6_gateway_mac;
printf "IPv6 MTU: %s\n", $interface->ipv6_mtu
+ if $interface->ipv6_mtu;
printf "MTU: %s\n", $interface->mtu
+ if $interface->mtu;
printf "DNS Server %s\n", $interface->dnsserver
+ if $interface->dnsserver;
print "\n";
print $interface->dump;
printf "\nDONE - %s\n", $interface->name if $interface->name;
}
}