#!perl -w -Ilib # $Id: StartManager.pl 769 2007-07-26 18:44:38Z kindlund $ use strict; use warnings; use Carp (); use Data::Dumper; # Include Hash Serialization Utility Libraries use Storable qw(nfreeze thaw); # Include Base64 Libraries use MIME::Base64 qw(encode_base64 decode_base64); # Include Getopt Parser use Getopt::Long; use HoneyClient::Manager; # We expect that the user will supply a single argument to this script. # Namely, the initial URL that they want the Agent to use. # They can however supply multiple urls which will be processed in order # Change to 'HoneyClient::Agent::Driver::Browser::IE' or # 'HoneyClient::Agent::Driver::Browser::FF' my $driver = "HoneyClient::Agent::Driver::Browser::IE"; my $config = undef; my $maxrel = -1; my $nexturl = ""; my $urllist= ""; # TODO: Need --help option, along with sanity checking. # TODO: Also need a decent POD for this code. GetOptions('driver=s' => \$driver, 'master_vm_config=s' => \$config, 'url_list=s' => \$urllist, 'max_relative_links:i' => \$maxrel); # Go through the list of urls to create the array # Anything not associated with an option is a URL # Grab those first and then get the ones from the file specified my @urls; push( @urls, @ARGV ); if( -e $urllist ){ open URL, $urllist; push(@urls, ); } # Get the first url from the list # Create a hashtable in the form: url => 1 for links_to_visit chomp @urls; my $firsturl = shift @urls; my %remaining_urls; foreach(@urls){ # We assign our initial list of URLs a priority of 1000, so that # they'll be (likely to be) selected first, before going to any other # external URLs found from subsequent drive operations. $remaining_urls{$_} = 1000; } my $agentState = HoneyClient::Manager->run( driver => $driver, master_vm_config => $config, agent_state => encode_base64(nfreeze({ $driver => { next_link_to_visit => $firsturl, max_relative_links_to_visit => $maxrel, links_to_visit => \%remaining_urls, }, })), );