/[scripts]/trunk/mitm-ssl.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/mitm-ssl.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 130 by dpavlin, Wed Jan 6 23:19:29 2010 UTC revision 132 by dpavlin, Wed Jan 6 23:54:02 2010 UTC
# Line 4  Line 4 
4    
5  use strict;  use strict;
6  use POSIX;  use POSIX;
7  use IO::Socket::SSL;  use IO::Socket::SSL qw(debug3);
8    $Net::SSLeay::trace = 4;
9  use Getopt::Long;  use Getopt::Long;
10    use Time::HiRes qw(time);
11    
12    my $laddr = "127.0.0.1";
13    my $lport = 8080;
14    my $raddr      = "127.0.0.1";
15    my $rport      = 80;
16    my $logdir    = "$laddr:$lport-$raddr:$rport";
17    
 my $localport;  
 my $localaddr;  
18  my $help;  my $help;
 my $host;  
 my $port;  
19  my $daemon;  my $daemon;
20  my $buffersize = 2048;  my $buffersize = 2048;
21  my $logtype;  my $logtype;
 my $logdir;  
22  my $daemon;  my $daemon;
23  my $serverkey;  my $serverkey = "$logdir/ssl.key";
24  my $servercert;  my $servercert = "$logdir/ssl.cert";
25  my $serverdh;  my $serverdh;
26    
27  $| = 1;  $| = 1;
28    
29  my $goresult = GetOptions(  my $goresult = GetOptions(
30          "lport=i"      => \$localport,          "lport=i"      => \$lport,
31          "laddr=s"      => \$localaddr,          "laddr=s"      => \$laddr,
32          "rport=i"      => \$port,          "rport=i"      => \$rport,
33          "raddr=s"      => \$host,          "raddr=s"      => \$raddr,
34          "logtype=i"    => \$logtype,          "logtype=i"    => \$logtype,
35          "logdir=s"     => \$logdir,          "logdir=s"     => \$logdir,
36          "daemon"       => \$daemon,          "daemon"       => \$daemon,
# Line 59  END Line 62  END
62          exit;          exit;
63  }  }
64    
 # set default values  
 $localport = 8080        unless ($localport);  
 $localaddr = "127.0.0.1" unless ($localaddr);  
 $port      = 80          unless ($port);  
 $host      = "127.0.0.1" unless ($host);  
 $logdir    = "dump"         unless ($logdir);  
   
65  mkdir $logdir;  mkdir $logdir;
66    
67  my %o = (  system "openssl req -new -x509 -days 365 -nodes -out $servercert -keyout $serverkey"
68          'dir'    => $logdir,          if ! -e $serverkey && ! -e $servercert;
69          'port'   => $localport,  
         'toport' => $port,  
         'tohost' => $host  
 );  
70    
71  if ($daemon) {  if ($daemon) {
72          my $pid = fork;          my $pid = fork;
# Line 83  if ($daemon) { Line 76  if ($daemon) {
76  }  }
77    
78  my $ah = IO::Socket::SSL->new(  my $ah = IO::Socket::SSL->new(
79          'LocalPort'       => $localport,          'LocalPort'       => $lport,
80          'LocalAddr'       => $localaddr,          'LocalAddr'       => $laddr,
81          'Reuse'           => 1,          'Reuse'           => 1,
82          'Proto'           => 'tcp',          'Proto'           => 'tcp',
83          'SSL_verify_mode' => '0',          'SSL_verify_mode' => '0',
84          'SSLdhfile'       => $serverdh,          'SSLdhfile'       => $serverdh,
85          'SSL_cert_file'   => $servercert,          'SSL_cert_file'   => $servercert,
86          'SSL_key_file'    => $serverkey,          'SSL_key_file'    => $serverkey,
87          'Listen'          => 10          'Listen'          => 10,
88    #       'SSL_version' => 'SSLv3',    # SSLv3, SSLv2, TLSv1
89    #       'SSL_cipher_list' => 'RC4-MD5',
90  ) || die "$!";  ) || die "$!";
91    
92  $SIG{'CHLD'} = 'IGNORE';  $SIG{'CHLD'} = 'IGNORE';
# Line 110  while (1) { Line 105  while (1) {
105          if ( !defined($pid) ) { print STDERR "cannot fork while(1) $!\n"; }          if ( !defined($pid) ) { print STDERR "cannot fork while(1) $!\n"; }
106          elsif ( $pid == 0 ) {          elsif ( $pid == 0 ) {
107                  $ah->close( SSL_no_shutdown => 1 );                  $ah->close( SSL_no_shutdown => 1 );
108                  Run( \%o, $ch, $num );                  Run( $ch, $num );
109          } else {          } else {
110                  $ch->close( SSL_no_shutdown => 1 );                  $ch->close( SSL_no_shutdown => 1 );
111          }          }
112  }  }
113    
114  sub Run {  sub Run {
115          my ( $o, $ch, $num ) = @_;          my ( $ch, $num ) = @_;
116          my $th = IO::Socket::SSL->new(          my $th = IO::Socket::SSL->new(
117                  'PeerAddr'        => $o->{'tohost'},                  'PeerAddr'        => $raddr,
118                  'PeerPort'        => $o->{'toport'},                  'PeerPort'        => $rport,
119                  'SSL_use_cert'    => '0',  #               'SSL_use_cert'    => '0',
120                  'SSL_verify_mode' => '0',  #               'SSL_verify_mode' => '0',
121    
                 #       'SSL_cipher_list' => 'NUL:LOW:EXP:ADH',  
122                  'SSL_version' => 'SSLv3',    # SSLv3, SSLv2, TLSv1                  'SSL_version' => 'SSLv3',    # SSLv3, SSLv2, TLSv1
123                    'SSL_cipher_list' => 'RC4-MD5',
124                  'Proto'       => 'tcp'                  'Proto'       => 'tcp'
125          );          );
126          if ( !$th ) { print "cannot connect th: $!"; exit 0; }          if ( !$th ) { print "cannot connect $raddr:$rport th: $!"; exit 0; }
127          else        { print "connected!"; }          else        { print "connected to $raddr:$rport\n"; }
128          my $fh;          my $fh;
129          if ( $o->{'dir'} ) {          if ( -d $logdir ) {
130                  $fh = Symbol::gensym();                  $fh = Symbol::gensym();
131                  open( $fh, ">$o->{'dir'}/tunnel$num.log" ) or die "$!";                  my $path = $logdir . Time::HiRes::time();
132                    open( $fh, '>', $path ) or die "$!";
133          }          }
134          $ch->autoflush();          $ch->autoflush();
135          $th->autoflush();          $th->autoflush();

Legend:
Removed from v.130  
changed lines
  Added in v.132

  ViewVC Help
Powered by ViewVC 1.1.26