meus scripts perl que usam Net: Pcap não funcionam quando eu os coloco em uma vm no meu servidor

0

Eu estou tentando executar um script perl que eu tenho script para despejar os pacotes da minha rede, Eu estou usando os módulos Net: Pcap e netpacket.

Eles estão funcionando bem no meu laptop e no do meu amigo. mas quando eu os movo para um vm no meu servidor, eles não correm nada ..

Alguém pode me ajudar com isso por favor .. e aqui está meu script.

#!/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, );
    
por Kiran Vemuri 18.06.2013 / 16:11

3 respostas

0

O problema era que a interface que eu estava capturando não tinha um endereço IP atribuído a ele. era uma VM em um cluster e eu o programava de tal forma que um nic virtual é configurado para capturar os pacotes que entram em uma porta. O administrador não deu nenhum endereço ip.

quando eu configuro um endereço IP aleatório para essa interface usando

sudo ifconfig <interface> <x.x.x.x>

funcionou bem ...

    
por 19.06.2013 / 10:37
1

Alguns hipervisores proíbem ativar o modo promíscuo nas NICs da VM por padrão, o que (dependendo do que você está fazendo) pode prejudicar sua captura. Verifique as configurações da sua VM para se certificar de que ela possui as permissões necessárias.

    
por 18.06.2013 / 20:11
0

Tente usar o strace para ver a interação dos seus programas com o sistema. Você pode encontrar dicas sobre uma biblioteca que não pode ser carregada ou apenas o que ela estava fazendo imediatamente antes de falhar.

Eu presumo que o libpcap está instalado?

tcpdump funciona bem?

    
por 18.06.2013 / 19:59