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

📄 layer2.pm

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 PM
字号:
## $Id: Layer2.pm,v 1.8 2006/05/06 16:07:48 gomor Exp $#package Net::Write::Layer2;use strict;use warnings;use Carp;require Net::Write::Layer;our @ISA = qw(Net::Write::Layer);__PACKAGE__->cgBuildIndices;BEGIN {   my $osname = {      cygwin  => [ \&_openWin32, \&_sendWin32, \&_closeWin32, ],      MSWin32 => [ \&_openWin32, \&_sendWin32, \&_closeWin32, ],      linux   => [ \&_openOther, \&_sendLinux, undef,         ],   };   *open  = $osname->{$^O}->[0] || \&_openOther;   *send  = $osname->{$^O}->[1] || \&_sendOther;   *close = $osname->{$^O}->[2] || \&_closeOther;}require Net::Write;no strict 'vars';sub _openOther {   my $self = shift;   croak("Must be EUID 0 to open a device for writing\n")      if $>;   croak("@{[(caller(0))[3]]}: you dit not specify dev attribute\n")      unless $self->dev;   my $fd = Net::Write::netwrite_open($self->[$__dev])      or croak("@{[(caller(0))[3]]}: netwrite_open: @{[$self->dev]}: $!\n");   my $io = IO::Socket->new;   $io->fdopen($fd, 'w') or croak("@{[(caller(0))[3]]}: fdopen: $!\n");   $self->[$___io] = $io;   1;}sub _openWin32 {   my $self = shift;   my $err;   my $pd = Net::Pcap::open_live(      $self->[$__dev],      1514,      0,      1000,      \$err,   );   unless ($pd) {      croak("@{[(caller(0))[3]]}: open_live: @{[$self->dev]}: $!\n");   }   $self->[$___io] = $pd;   1;}sub _sendLinux {   my $self = shift;   my ($raw) = @_;   # Here is the Linux dirty hack (to choose outgoing device, surely)   my $sin = pack('S a14', 0, $self->[$__dev]);   while (1) {      my $ret = CORE::send($self->[$___io], $raw, 0, $sin);      unless ($ret) {         if ($!{ENOBUFS}) {            $self->cgDebugPrint(2, "send: got ENOBUFS, sleeping 1 second");            sleep 1;            next;         }         elsif ($!{EHOSTDOWN}) {            $self->cgDebugPrint(2, "send: host is down");            last;         }         carp("@{[(caller(0))[3]]}: send: $!\n");         return undef;      }      last;   }   1;}sub _sendOther {   my $self = shift;   my ($raw) = @_;   while (1) {      my $ret = $self->[$___io]->syswrite($raw, length($raw));      unless ($ret) {         if ($!{ENOBUFS}) {            $self->cgDebugPrint(2, "syswrite: got ENOBUFS, sleeping 1 second");            sleep 1;            next;         }         elsif ($!{EHOSTDOWN}) {            $self->cgDebugPrint(2, "syswrite: host is down");            last;         }         carp("@{[(caller(0))[3]]}: syswrite: $!\n");         return undef;      }      last;   }   1;}sub _sendWin32 {   my $self = shift;   my ($raw) = @_;   if (Net::Pcap::sendpacket($self->[$___io], $raw) < 0) {      carp("@{[(caller(0))[3]]}: send: ".Net::Pcap::geterr($self->[$___io]).           "\n");      return undef;   }   1;}sub _closeWin32 { Net::Pcap::close(shift->[$___io]) }sub _closeOther { shift->SUPER::close(@_)           }1;__END__=head1 NAMENet::Write::Layer2 - object for a link layer (layer 2) descriptor=head1 SYNOPSIS   require Net::Write::Layer2;   # Usually, you use it to send ARP frames,   # that is crafted from ETH layer   # Under Windows, to send frames, you MUST craft from layer 2   my $desc = Net::Write::Layer2->new(      dev => $networkInterface,   );   $desc->open;   $desc->send($rawStringToNetwork);   $desc->close;=head1 DESCRIPTIONThis is the class for creating a layer 2 descriptor.=head1 ATTRIBUTES=over 4=item B<dev>The string specifying network interface to use.Under Unix-like systems, this is in this format: \w+\d+ (example: eth0).Under Windows systems, this is more complex; example:\Device\NPF_{0749A9BC-C665-4C55-A4A7-34AC2FBAB70F}=back=head1 METHODSSee B<Net::Write::Layer> for inherited methods.=head1 AUTHORPatrice E<lt>GomoRE<gt> Auffret=head1 COPYRIGHT AND LICENSECopyright (c) 2006, Patrice E<lt>GomoRE<gt> AuffretYou may distribute this module under the terms of the Artistic license.See Copying file in the source distribution archive.=head1 RELATED MODULESL<Net::Packet>, L<Net::RawIP>, L<Net::RawSock>=cut

⌨️ 快捷键说明

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