1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#!/usr/bin/perl
# Load modules
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::UDP;
use NetPacket::IP qw(:strip);
use IO::Socket;
use threads;
use Thread::Queue;
use Socket;
use constant SIMPLE_UDP_PORT => 516;
use constant REMOTE_HOST => '192.168.10.10';
my $trans_serv = getprotobyname( 'udp' );
my $remote_host = gethostbyname( REMOTE_HOST );
my $remote_port = SIMPLE_UDP_PORT;
my $destination = sockaddr_in( $remote_port, $remote_host );
socket( UDP_SOCK, PF_INET, SOCK_DGRAM, $trans_serv );
$SIG{CHLD} = 'IGNORE';
#my $socket=IO::Socket::INET->new(
# PeerAddr => '192.168.10.10',
# PeerPort => '516',
# Proto => 'udp' );
my $queue = Thread::Queue -> new;
if($> != 0)
{
die "You need EUID 0 to use this tool!\n\n";
}
my $monitor = threads->create ("monitor", $queue);
$monitor->detach();
my $monitor2 = threads->create ("monitor", $queue);
$monitor2->detach();
my $monitor3 = threads->create ("monitor", $queue);
$monitor3->detach();
sub monitor {
while(1){
# print "send packet debut fils \n";
while (my $request = $queue->dequeue()){
send(UDP_SOCK, $packet, 0, $destination);
threads->yield();
}
}
print "fin";
}
# Callback
sub sniffit
{
my ($args,$header,$packet) = @_;
#print eth_strip($packet)."\n";
#my $ip = NetPacket::IP->decode(eth_strip($packet));
#my $udp = NetPacket::UDP->decode($ip->{data});
$queue->enqueue($request);
}
# Start sniffin in promisc mode
Net::PcapUtils::loop(\&sniffit,
Promisc => 1,
SNAPLEN => 1000,
FILTER => 'udp and port 516',
DEV => 'eth3'); |
Partager