in reply to Re^3: Net::Libdnet 0.01 does not work under Window 7
in thread Net::Libdnet 0.01 does not work under Window 7

Can you please post a working snippet with Win32::Interfaces (PPC) instead of $oDevice = Net::Frame::Device->new(dev => '...') ? For my ready-made automatical scripts, it is not reasonable to use interactive mode with PPC. Whilst we cannot get the needed interfaces structures (hashes) via Net::Libdnet in Win7, we cannot normally use all the functionality of old Net::Packet and Net::Frame based scripts under Win7 (or newer). I had written some useful perl apps based on Net::Packet / Net::Frame under WinXP. Now, I am looking for a method to "repair" Net::Libdnet in Win7 in order to use these apps further, in current Windows. However, when your "wrapper module" for Net::Frame will be installable via CPAN, I would like to try it. Thank you!

  • Comment on Re^4: Net::Libdnet 0.01 does not work under Window 7

Replies are listed 'Best First'.
Re^5: Net::Libdnet 0.01 does not work under Window 7
by VinsWorldcom (Prior) on Jan 17, 2016 at 14:13 UTC

    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; } }