#madtest.cgi - perl script that interprets a user inputted mad for #agent testing. use Socket; use Sys::Hostname; %postInputs = readPostInput(); my ( $count, $hisiaddr, $hispaddr, $histime, $host, $iaddr, $paddr, $port, $proto, $rin, $rout, $rtime, $SECS_of_70_YEARS, $setipaddr); $setipaddr = $postInputs{'IPAddress'}; $ipaddr = inet_aton($setipaddr); $PORTNO = 7777; $MAD_SIZE = 512; $proto = getprotobyname('udp'); $paddr = sockaddr_in($PORTNO, $ipaddr); # port, ipaddress @madArray = ($postInputs{'BaseVersion'}, $postInputs{'MgmtClass'} , $postInputs{'ClassVersion'}, $postInputs{'Method'}, (pack "s", $postInputs{'Status'}), (pack "s", $postInputs{'ClassSpecific'}), (pack "s", $postInputs{'AttributeID'}), $postInputs{'Reserved'}, (pack "l", $postInputs{'AttributeModifier'}), (pack "Z",$postInputs{'Data'})); $packet= pack( "c c c C n n NN n N a*", $postInputs{'BaseVersion'}, $postInputs{'MgmtClass'}, $postInputs{'ClassVersion'}, ($postInputs{'R'}<<7)|$postInputs{'Method'}, $postInputs{'Status'}, $postInputs{'ClassSpecific'}, $postInputs{TransactionID_Hi}, $TransID_Lo, $postInputs{'Reserved'}, $postInputs{'AttributeModifier'} ,$postInputs{'Data'}); #Next Throw data out to a UDP Server (Our Interprocess Communication.) # #Go into binary mode binmode (SOCKET); select(socket(SOCKET, PF_INET, SOCK_DGRAM, $proto)) || die "socket: $!"; #bind(SOCKET, $paddr) || die "bind: $!"; #$| = 1; $z2=0; while ($z2 < $madCount) { send(SOCKET, $packet, 0, $paddr); #this doesn't work, obviously. :( send(SOCKET, $packet, MAD_SIZE, $paddr); $z2++; } close(SOCKET) || die "dead socket: $!"; select(STDOUT); printThankYou(); ####Method that splits up pair/values sub readPostInput(){ my (%searchField, $buffer, $pair, @pairs); if ($ENV{ 'REQUEST_METHOD'} eq 'POST'){ read(STDIN, $buffer, $ENV{ 'CONTENT_LENGTH'}); #separate the name values into an array named @pairs @pairs = split (/&/, $buffer); #Array is then Url decoded into $searchField hash. foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9]) /pack("C", hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9]) /pack("C", hex($1))/eg; $searchField{ $name} = $value; } } return (%searchField); } #return a web page sub printThankYou(){ # no need to actually put this in for example. }