Я пытаюсь запустить Perl-скрипт, который я написал для выгрузки пакетов из моей сети, я использую модули Net:Pcap и netpacket.
Они отлично работают на ноутбуке моего и моего друга. но когда я портирую их на виртуальную машину на моем сервере, они вообще не запускаются ..
Может кто-нибудь помочь мне с этим, пожалуйста .. и вот мой сценарий
#!/usr/bin/perl -w
# #########################
#
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP;
use NetPacket::TCP;
use NetPacket::IP qw(:strip);
use strict;
use Data::Dumper;
#use warnings;
my $interface= 'eth1';
my $snaplen= 65536;
my $filter='tcp';
my $promisc = 1;
my $timeout = 10000 ;
my $err;
my @array;
my $decval;
my $roomnum;
sub process_pkt
{
my ($user_data,$header,$packet) = @_;
my $ip= NetPacket::IP->decode(eth_strip($packet));
my $tcp= NetPacket::TCP->decode($ip->{data});
my $payload = $tcp->{data};
if(length($payload)==32)
{
for(my $decode=0;$decode<32;$decode++)
{
$array[$decode] = unpack('H2',substr($payload,$decode,1));
#$decval[$decode] = hex($array[$decode]);
}
my $cardnum=$array[28].$array[27].$array[26].$array[25];
$decval=hex($cardnum);
my $length= scalar(@array);
if($array[19] eq '0e'){
$roomnum='221';
}
elsif($array[19] eq '0d'){
$roomnum='220';
}
elsif($array[19] eq '0b'){
$roomnum='219';
}
elsif($array[19] eq '0c'){
$roomnum='218';
}
elsif($array[19] eq '09'){
$roomnum='204';
}
else
{
$roomnum='unknown';
}
#open (MYFILE, '>>perlarray.txt');
if($array[22] eq '0c')
{
print ( " Decision: Granted:".$array[22]."card number: ".$decval." room num:".$roomnum."\n");
}
elsif($array[22] eq '04')
{
print ("Decision: Denied:".$array[22]." card number: ".$decval." room num:".$roomnum."\n");
}
elsif($array[22] eq '0d')
{
print ("Decision: Locked:".$array[22]."card number: ".$decval." room num:".$roomnum."\n");
}
else
{
print ("Decision: unknown :".$array[22]." card number: ".$decval." room num:".$roomnum."\n");
}
# print MYFILE ( " Data: \n".Dumper(\@array)." \n");
# print MYFILE ( " Data: \n".Dumper(\@decval)." \n");
# close (MYFILE);
}
}
Net::PcapUtils::loop(\&process_pkt,
SNAPLEN => 65536,
PROMISC => 1,
FILTER => 'tcp',
FILTER => 'ip src 129.7.236.40',
DEV => $interface, );