#!/usr/bin/perl -- # # $Id: makebait,v 1.28 1996/10/15 13:26:22 johnbob Exp johnbob $ # # # Generate HTML containing bogus addresses, and some not-so-bogus # addresses like 'postmaster'. # The idea is to keep SPAMers and junkmailers who search web pages # for addresses too busy with bogus addresses to flood valid ones. # No good web site should be without a few thousand bogus addresses # that are changed often. # $verbose=0; $body_only=0; $title='SPAM bait'; $random_title=0; $n_low=900; $n_high=1100; $cgi_mode=0; $produced_output=0; $from_mode=0; @candidate_list = ( 'abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz0123456789', 'abcdefghijklmnopqrstuvwxyz0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ); @candidate_list_p = ( 844, 125, 25, 5, 1, ); @name_length_p = ( 1, 49, 100, 150, 150, 125, 100, 75, ); @word_length_p = ( 1, 100, 500, 400, 350, 300, 250, 200, 150, 100, 50, 25, 1, 1, 1, 1, ); @parts_p = ( 7, 2, 1, ); # these should be modified from # time to time to throw the 'bots off %ending_assoc = ( 'com', 40, 'edu', 30, 'org', 10, 'gov', 1, 'us', 1, 'fi', 1, 'nl', 5, 'uk', 4, 'net', 2, 'kr', 1, 'de', 5, 'se', 1, 'no', 4, 'si', 1, ); @ending_list = keys %ending_assoc; @ending_list_p = values %ending_assoc; @z_who = ('postmaster','abuse','admin','root'); @z_where_at = ('','@localhost','@loopback'); @z_autoresponders = ('jnyynpr@plorecebzb.pbz','znaerzbir@plorecebzb.pbz', 'nohfr@plorecebzb.pbz','nohfrobg@plorecebzb.pbz','fraqre@nafjrezr.pbz', 'frira@tybonysa.pbz','yra@hck.arg','grez@zbarljbeyq.pbz', 'gevdhnag@rneguyvax.arg','qvfarltebhc@nafjrezr.pbz','yvfgf@nafjrezr.pbz', 'serq@svapba.pbz','rmvar@fcelarg.pbz','ppo@ploreirefr.pbz', 'vasvavgl@haqngn.pbz','wbuaz@znaafjro.pbz','wraal31@whab.pbz', 'crtnfhf496@cbjrearg.pbz','pncf@kcbaragvny.pbz', 'fgne5@cbobk.unegyrl.ba.pn','hfpppa@unira.vbf.pbz','rkarg@obbgf.pbz', ); %options = ( '-v', '$verbose=1;', '-h', '&do_help;', '-b', '$body_only=1;', '-t', '$title=shift(@ARGV);$random_title=-1;', '-n', '$n_low=shift(@ARGV);$n_high=$n_low;', '-cgi', '$cgi_mode=1;$body_only=0;if($random_title!=-1){$random_title=1;};', '-r', '$random_title=1;', '-f', '$from_mode=1;', ); sub do_help { print "-v turn on verbose mode\n"; print "-h help\n"; print "-b generate html body only, not an entire file\n"; print "-n v how many addresses to generate\n"; print "-cgi behave like a cgi script\n"; $produced_output=1; } srand(time|$$); if ( (@ARGV) ) { while( $arg=shift(@ARGV) ) { if( defined( $options{$arg} ) ) { eval $options{$arg}; } else { &generate_to_file($arg); $produced_output=1; } } } if( ! $produced_output ) { $cgi_mode=1; $body_only=0; if($random_title!=-1){$random_title=1;} &generate_to_file("-"); } exit 0; sub generate_to_file { local($fname) = @_; if( ! open(OF,">$fname") ) { return; } if( $cgi_mode ) { print OF "Content-type: text/html\n\n"; } if( $random_title ) { local($parts)=&integer_from_to(1,6); $title = &capitalize(&random_word_p()); #$title = &capitalize(&random_pronounceable_word()); for(local($i)=1;$i<$parts;$i++) { $title .= ' ' . &capitalize(&random_word_p()); #$title .= ' ' . &capitalize(&random_pronounceable_word()); } } if( ! $body_only ) { print OF "
";
local($n_mailto) = &integer_from_to($n_low,$n_high);
$verbose && print "$n_mailto\n";
for(local($i)=0;$i<$n_mailto;$i++)
{
$address = &fake_address;
$verbose && print "[$address]\n";
if( $from_mode )
{
print OF "From: $address\n";
}
else
{
print OF "$address";
if( &integer_from_to(1,3) != 1 )
{
print OF "\n";
}
else
{
print OF " ";
}
}
}
if( ! $body_only )
{
print OF "
";
}
close(OF);
}
sub integer_from_to
{
local($from,$to) = @_;
# $verbose && print "integer_from_to $from,$to\n";
if( $from == $to )
{
return $from;
}
if( $from > $to )
{
return &integer_from_to($to,$from);
}
local($diff) = ($to-$from)+1;
local($rv)=$from+int(rand($diff));
# $verbose && print "rv=[$rv]\n";
return $rv;
}
sub integer_p_function
{
local(@p) = @_;
local($total_volume) = 0;
local($v);
foreach $v ( @p )
{
$total_volume += $v;
}
local($volume) = int(rand($total_volume));
local($rv) = 0;
local($sum) = 0;
foreach $v ( @p )
{
$sum += $v;
if( $volume < $sum )
{
return $rv;
}
$rv++;
}
# this should never be reached
return ($rv-1);
}
sub fake_address
{
if( &integer_from_to(1,100) == 1 )
{
return &zinger();
}
local($parts) = &integer_p_function(@parts_p) + 1;
local($index)=&integer_p_function(@candidate_list_p);
local($candidates) = $candidate_list[$index];
local($rv) = &random_name_p($candidates) . '@' . &random_name_p($candidates);
for(local($i)=1;$i<$parts;$i++)
{
$rv .= '.' . &random_name_p($candidates);
}
$index=&integer_p_function(@ending_list_p);
$rv .= '.' . $ending_list[$index];
return $rv;
}
sub zinger
{
local($rv);
if( &integer_from_to(0,3) )
{
$rv = $z_who[&integer_from_to(0,$#z_who)];
$rv .= $z_where_at[&integer_from_to(0,$#z_where_at)];
}
else
{
$rv = $z_autoresponders[&integer_from_to(0,$#z_autoresponders)];
$rv =~ y/a-zA-Z/n-za-mN-ZA-M/;
}
$rv = &camel_case($rv);
return $rv;
}
sub random_name
{
local($candidates,$from,$to) = @_;
local($rv) = '';
local($a,$b) = split(/ /,$candidates);
if( ! defined($b) )
{
$b = $a;
}
local($length) = &integer_from_to($from,$to);
if( $length < 1 )
{
return $rv;
}
$rv .= &random_letter($a);
for(local($i)=1;$i<$length;$i++)
{
$rv .= &random_letter($b);
}
return $rv;
}
sub random_name_p
{
local($candidates) = @_;
local($rv) = '';
local($a,$b) = split(/ /,$candidates);
if( ! defined($b) )
{
$b = $a;
}
local($length)= &integer_p_function(@name_length_p) + 1;
if( $length < 1 )
{
return $rv;
}
$rv .= &random_letter($a);
for(local($i)=1;$i<$length;$i++)
{
$rv .= &random_letter($b);
}
return $rv;
}
sub random_letter
{
local($candidates) = @_;
return substr($candidates,&integer_from_to(0,length($candidates)-1),1);
}
sub random_word_p
{
local($candidates) = @_;
local($rv) = '';
local($length)= &integer_p_function(@word_length_p) + 1;
if( $length < 1 )
{
return $rv;
}
for(local($i)=0;$i<$length;$i++)
{
$rv .= &random_letter('abcdefghijklmnopqrstuvwxyz');
}
return $rv;
}
sub random_pronounceable_word
{
local($candidates) = @_;
local($rv) = '';
local($length)= &integer_p_function(@word_length_p) + 1;
if( $length < 1 )
{
return $rv;
}
if( $length == 1 )
{
@words_of_length_1 = ( 'a','i' );
}
$rv .= &random_syllable();
while(length($rv)<$length)
{
$rv .= &random_syllable();
}
return $rv;
}
sub random_syllable
{
return (&random_letter('bcdfghjklmnpqrstvwxyz') .
&random_letter('aeiou') .
&random_letter('bcdfghjklmnpqrstvwxyz')
);
}
sub capitalize
{
local($word) = @_;
if( ! defined($word) || $word eq '' )
{
return '';
}
local($c) = substr($word,0,1);
$c =~ y/a-z/A-Z/;
substr($word,0,1) = $c;
return $word;
}
sub camel_case
{
local($word) = @_;
if( ! defined($word) || $word eq '' )
{
return '';
}
local($c);
for(local($i)=0;$i