| NetworkInfo-Discovery-NetBIOS documentation | Contained in the NetworkInfo-Discovery-NetBIOS distribution. |
NetworkInfo::Discovery::NetBIOS - NetworkInfo::Discovery extension to find NetBIOS services
Version 0.05
use NetworkInfo::Discovery::NetBIOS;
my $scanner = new NetworkInfo::Discovery::NetBIOS hosts => [ qw(192.168.0.0/24) ];
$scanner->do_it;
for my $host ($scanner->get_interfaces) {
printf "<%s> NetBios(node:%s zone:%s)\n", $host->{ip},
$host->{netbios}{node}, $host->{netbios}{zone};
}
This module is an extension to NetworkInfo::Discovery which can find
hosts and services using the NetBIOS protocol.
Create and return a new object.
Options
hosts - expects a scalar or an arrayref of IP addresses in CIDR notationExample
# with a scalar argument
my $scanner = new NetworkInfo::Discovery::NetBIOS hosts => '192.168.0.0/24;
# with an arrayref
my $scanner = new NetworkInfo::Discovery::NetBIOS hosts => [ qw(192.168.0.0/24) ];
Run the scan.
Add hosts or networks to the scan list. Expects addresses in CIDR notation.
Examples
$scanner->hosts('192.168.4.53'); # add one host
$scanner->hosts('192.168.5.48/29'); # add a subnet
$scanner->hosts(qw(192.168.6.0/30 10.0.0.3/28)); # add two subnets
(F) hosts() was called with something it can't handle.
Sébastien Aperghis-Tramoni, <sebastien@aperghis.net>
Please report any bugs or feature requests to
bug-networkinfo-discovery-netbios@rt.cpan.org, or through the web interface at
http://rt.cpan.org. I will be notified, and then you'll automatically
be notified of progress on your bug as I make changes.
Copyright 2004 Sé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.
| NetworkInfo-Discovery-NetBIOS documentation | Contained in the NetworkInfo-Discovery-NetBIOS distribution. |
package NetworkInfo::Discovery::NetBIOS; use strict; use Carp; use Net::NBName; use Net::Netmask; use NetworkInfo::Discovery::Detect; { no strict; $VERSION = '0.05'; @ISA = qw(NetworkInfo::Discovery::Detect); }
sub new { my $class = shift; my $self = $class->SUPER::new(); my %args = @_; $class = ref($class) || $class; bless $self, $class; # add private fields $self->{_hosts_to_scan} = []; # treat given arguments for my $attr (keys %args) { $self->$attr($args{$attr}) if $self->can($attr); } return $self }
sub do_it { my $self = shift; my @hosts = (); my $netbios = new Net::NBName; for my $host (@{$self->{_hosts_to_scan}}) { for my $ip (Net::Netmask->new($host)->enumerate) { # trying to find status information on each IP address my %host = (); my $status = $netbios->node_status($ip); if($status) { $host{ip} = $ip; $host{mac} = $status->mac_address; $host{netbios} = {}; for my $rr ($status->names) { $host{netbios}{node} = $rr->name if $rr->suffix == 0x00 and $rr->G eq 'UNIQUE'; $host{netbios}{zone} = $rr->name if $rr->suffix == 0x00 and $rr->G eq 'GROUP'; } push @hosts, { %host }; } } } # add found hosts $self->add_interface(@hosts); # return list of found hosts return $self->get_interfaces }
sub hosts { my $self = shift; if(ref $_[0] eq 'ARRAY') { push @{$self->{_hosts_to_scan}}, @{$_[0]} } elsif(ref $_[0]) { croak "fatal: Don't know how to deal with a ", lc(ref($_[0])), "ref." } else { push @{$self->{_hosts_to_scan}}, @_ } }
1; # End of NetworkInfo::Discovery::NetBIOS