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, );
linux
networking
perl
packet
Kiran Vemuri
źródło
źródło
perl foo.pl
lub jestfoo.pl
na twojej ścieżce i po prostu wykonujesz to po imieniu? Jest perlusr/bin/perl
?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?Odpowiedzi:
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.
źródło
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?
źródło
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ą
działało dobrze ...
źródło