⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 env.pm

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 PM
字号:
## $Id: Env.pm,v 1.2.2.13 2006/11/05 15:28:28 gomor Exp $#package Net::Packet::Env;use strict;use warnings;require Exporter;require Class::Gomor::Array;our @ISA = qw(Exporter Class::Gomor::Array);our @EXPORT_OK = qw($Env);use Carp qw(croak);require Net::Libdnet;require Net::IPv6Addr;our @AS = qw(   dev   ip   ip6   mac   subnet   gatewayIp   gatewayMac   desc   dump   err   errString   noFrameAutoDesc   noFrameAutoDump   noDescAutoSet   noDumpAutoSet   _dnet);our @AO = qw(   debug);__PACKAGE__->cgBuildIndices;__PACKAGE__->cgBuildAccessorsScalar(\@AS);no strict 'vars';BEGIN {   my $osname = {      cygwin  => [ \&_getDevWin32, ],      MSWin32 => [ \&_getDevWin32, ],   };   *getDev = $osname->{$^O}->[0] || \&_getDevOther;}use Net::Packet::Utils qw(getGatewayIp);our $Env = __PACKAGE__->new;sub new {   my $self = shift->SUPER::new(      debug           => 0,      noFrameAutoDesc => 0,      noFrameAutoDump => 0,      noDescAutoSet   => 0,      noDumpAutoSet   => 0,      err             => 0,      errString       => '',      @_,   );   $self->[$__dev]      ? do { $self->[$__dev] = $self->getDevInfoFor($self->[$__dev]) }      : do { $self->[$__dev] = $self->getDevInfo                     };   $self->[$__mac]        = $self->getMac    unless $self->[$__mac];   $self->[$__subnet]     = $self->getSubnet unless $self->[$__subnet];   $self->[$__ip]         = $self->getIp     unless $self->[$__ip];   $self->[$__ip6]        = $self->getIp6    unless $self->[$__ip6];   $self->[$__gatewayIp]  = getGatewayIp()   unless $self->[$__gatewayIp];   $self;}sub getDevInfo {   my $self = shift;   # By default, we take outgoing device to Internet   $self->[$___dnet] = Net::Libdnet::intf_get_dst(shift() || '1.1.1.1');   $self->getDev;}sub getDevInfoFor {   my $self = shift;   $self->[$___dnet] = Net::Libdnet::intf_get(shift());   $self->getDev;}sub updateDevInfo {   my $self = shift;   my ($ip) = @_;   $self->getDevInfo($ip);   $self->[$__dev]       = $self->getDev;   $self->[$__ip]        = $self->getIp;   $self->[$__ip6]       = $self->getIp6;   $self->[$__mac]       = $self->getMac;   $self->[$__subnet]    = $self->getSubnet;   $self->[$__gatewayIp] = getGatewayIp($ip);}sub _getDevWin32 {   my $self = shift;   croak("@{[(caller(0))[3]]}: unable to find a suitable device\n")      unless $self->[$___dnet]->{name};   my %dev;   my $err;   require Net::Pcap;   Net::Pcap::findalldevs(\%dev, \$err);   croak("@{[(caller(0))[3]]}: Net::Pcap::findalldevs() error: $err\n")      if $err;   my $n;   for (reverse sort keys %dev) {      next if /GenericDialupAdapter/i;      s/\\/\\\\/g;      $dev{$_} = 'eth'.$n++;   }   %dev = map { $dev{$_} => $_ } sort keys %dev;   my $eth = $self->[$___dnet]->{name};   $dev{$eth};}sub _getDevOther {   shift->[$___dnet]->{name} || (($^O eq 'linux') ? 'lo' : 'lo0');}sub getSubnet { shift->[$___dnet]->{addr} || '127.0.0.1/8'            }sub getMac    { shift->[$___dnet]->{link_addr} || 'ff:ff:ff:ff:ff:ff' }sub getIp {   my $ip = shift->[$___dnet]->{addr} || '127.0.0.1';   $ip =~ s/\/\d+$//;   $ip;}sub _getIp6 {   my $self = shift;   my $dev = $self->[$__dev];   my $mac = $self->[$__mac];   my $buf = `/sbin/ifconfig $dev 2> /dev/null`;   $buf =~ s/$dev//;   $buf =~ s/$mac//i;   my ($ip6) = ($buf =~ /((?:[a-f0-9]{1,4}(?::|%|\/){1,2})+)/i); # XXX: better   if ($ip6) {      $ip6 =~ s/%|\///g;      $ip6 = lc($ip6);   }   ($ip6 && Net::IPv6Addr::ipv6_chkip($ip6) && $ip6) || '::1';}sub getIp6 {   my $self = shift;   $self->_getIp6($self->[$__dev]);}sub debug {   my $self = shift;   @_ ? do { $self->[$__debug] = $Class::Gomor::Debug = shift }      : $self->[$__debug];}1;=head1 NAMENet::Packet::Env - environment object used for frame capture/injection=head1 SYNOPSIS   use Net::Packet::Env qw($Env);   # Get default values from system   my $env = Net::Packet::Env->new;   # Get values from a specific device   my $env2 = Net::Packet::Env->new(dev => 'vmnet1');   print "dev: ", $env->dev, "\n";   print "mac: ", $env->mac, "\n";   print "ip : ", $env->ip,  "\n" if $env->ip;   print "ip6: ", $env->ip6, "\n" if $env->ip6;=head1 DESCRIPTIONBasically, this module is used to tell where to inject a frame, and B<Net::Packet::Frame> default behaviour regarding auto creation of B<Net::Packet::Desc> and B<Net::Packet::Dump> objects.=head1 ATTRIBUTES=over 4=item B<dev>The device on which frames will be injected.=item B<ip>The IPv4 address of B<dev>. It will be used by default for all created frames.=item B<ip6>The IPv6 address of B<dev>. It will be used by default for all created frames.=item B<mac>The MAC address of B<dev>. It will be used by default for all created frames.=item B<subnet>The subnet address of B<dev>. It will be set automatically.=item B<gatewayIp>The gateway IP address of B<dev>. It is set automatically under all platforms.=item B<gatewayMac>The gateway MAC address of B<dev>. It will not be set automatically. Due to the implementation of ARP lookup within B<Net::Packet>, we can't do it within this module. It is done within B<Net::Packet::DescL3> under Windows, to automatically build the layer 2 header.=item B<desc>The B<Net::Packet::Desc> object used to inject frames to network.=item B<dump>The B<Net::Packet::Dump> object used to receive frames from network.=item B<noFrameAutoDesc>This attribute controls B<Net::Packet::Frame> behaviour regarding B<Net::Packet::Desc> autocreation. If set to 0, when a B<Net::Packet::Frame> is created for the first time, a B<Net::Packet::Desc> object will be created if none has been set in B<desc> attribute for default B<$Env> object. Setting it to 1 avoids this behaviour.=item B<noFrameAutoDump>Same as above, but for B<Net::Packet::Dump> object.=item B<noDescAutoSet>This attribute controls B<Net::Packet::Desc> behaviour regarding global B<$Env> autosetting behaviour. If set to 0, when a B<Net::Packet::Desc> is created for the first time, the created B<Net::Packet::Desc> object will have a pointer to it stored in B<desc> attribute of B<$Env> default object. Setting it to 1 avoids this behaviour.=item B<noDumpAutoSet>Same as abose, but for B<Net::Packet::Dump> object.=item B<debug>The environment debug directive. Set it to a number greater than 0 to increase the level of debug messages. Up to 3, default 0.=back=head1 METHODS=over 4=item B<new>Object constructor. You can pass attributes that will overwrite default ones. Default values:debug:           0noFrameAutoDesc: 0noFrameAutoDump: 0noDescAutoSet:   0noDumpAutoSet:   0dev:             if not user provided, default interface is used, by calling B<getDevInfo> method. If user provided, all B<ip>, B<ip6> and B<mac> attributes will be used for that B<dev>.ip:              if not user provided, default interface IP is used, by calling B<getIp> method. If user provided, it is overwritten by the user.ip6:             if not user provided, default interface IPv6 is used, by calling B<getIp6> method. If user provided, it is overwritten by the user.mac:             if not user provided, default interface MAC is used, by calling B<getMac> method. If user provided, it is overwritten by the user.=item B<getDevInfo> [ (scalar) ]By default, network device to use is the one used by default gateway. If you provide an IP address as a parameter, the interface used will be the one which have direct access to this IP address.=item B<getDevInfoFor> (scalar)Will set internal attributes for network interface passed as a parameter. Those internal attributes are used to get IP, IPv6 and MAC attributes.=item B<updateDevInfo> (scalar)This is a helper method. You pass an IP address as a parameter, and all attributes for elected network interface will be updated (B<dev>, B<ip>, B<ip6>, B<mac>, B<subnet>, B<gatewayIp>).=item B<getDev>Returns network interface, by looking at internal attribute.=item B<getMac>Returns MAC address, by looking at internal attribute.=item B<getSubnet>Returns subnet address, by looking at internal attribute.=item B<getIp>Returns IP address, by looking at internal attribute.=item B<getIp6>Returns IPv6 address, by looking at internal attribute.=back=head1 AUTHORPatrice E<lt>GomoRE<gt> Auffret=head1 COPYRIGHT AND LICENSE   Copyright (c) 2004-2006, Patrice E<lt>GomoRE<gt> Auffret   You may distribute this module under the terms of the Artistic license.See LICENSE.Artistic file in the source distribution archive.      =head1 RELATED MODULES         L<NetPacket>, L<Net::RawIP>, L<Net::RawSock>      =cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -