moje skrypty Perla, które używają Net: Pcap, nie działają, gdy przesyłam je do vm na moim serwerze

0

Próbuję uruchomić skrypt perla, który napisałem skryptem, aby zrzucić pakiety z mojej sieci, Używam modułów Net: Pcap i netpacket.

Pracują dobrze na laptopie mojego i mojego przyjaciela. ale kiedy przekierowuję je na vm na moim serwerze, nie działają w ogóle ..

Czy ktoś może mi w tym pomóc? a oto mój scenariusz.

#!/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, );
Kiran Vemuri
źródło
Czy masz jakieś komunikaty o błędach? Jak uruchomić skrypt? Tak jak perl foo.pl lub jest foo.pl na twojej ścieżce i po prostu wykonujesz to po imieniu? Jest perl usr/bin/perl?
terdon
@terdon używam go za pomocą perl foo.pl I nie ... Nie daje mi żadnych błędów i tak, biblioteki perla są w usr / bin / perl
Kiran Vemuri
Co się dzieje? Po prostu go uruchamiasz i nic nie dostajesz? Czy skrypt się zaczyna? Spróbuj dodać print STDERR "foo\n" lub cokolwiek w różnych punktach skryptu, aby zobaczyć, czy jest on wykonywany i jak daleko się do niego dostać. Czy działa minimalny skrypt Perla?
terdon

Odpowiedzi:

1

Niektóre hiperwizory domyślnie zabraniają włączania trybu swobodnego w kartach sieciowych maszyn wirtualnych, co (w zależności od tego, co robisz) może spowodować przechwycenie przechwyconego obrazu. Sprawdź ustawienia swojej maszyny wirtualnej, aby upewnić się, że posiada wymagane uprawnienia.

Flup
źródło
0

Spróbuj użyć strace, aby spojrzeć na swoje interakcje z systemem. Możesz znaleźć podpowiedzi dotyczące biblioteki, której nie można załadować, lub po prostu tego, co robiła bezpośrednio przed niepowodzeniem.

Zakładam, że libpcap jest zainstalowany?

tcpdump działa poprawnie?

mc0e
źródło
yep .. tcpdump działa dobrze n zainstalowałem libpcap, pcaputils
Kiran Vemuri
0

Problem polegał na tym, że interfejs, który przechwyciłem, nie miał przypisanego adresu IP .. była to maszyna wirtualna w klastrze i zaprogramowałem ją w taki sposób, że wirtualne nic jest skonfigurowane do przechwytywania pakietów przychodzących do portu. Administrator nie podał mu żadnego adresu IP.

kiedy ustawię losowy adres IP na ten interfejs za pomocą

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

działało dobrze ...

Kiran Vemuri
źródło