/[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 132 by dpavlin, Wed Jan 6 23:54:02 2010 UTC revision 133 by dpavlin, Fri Jan 8 13:52:41 2010 UTC
# Line 5  Line 5 
5  use strict;  use strict;
6  use POSIX;  use POSIX;
7  use IO::Socket::SSL qw(debug3);  use IO::Socket::SSL qw(debug3);
 $Net::SSLeay::trace = 4;  
8  use Getopt::Long;  use Getopt::Long;
9  use Time::HiRes qw(time);  use Time::HiRes qw(time);
10    
11    my $debug = 0;
12    
13  my $laddr = "127.0.0.1";  my $laddr = "127.0.0.1";
14  my $lport = 8080;  my $lport = 8080;
15  my $raddr      = "127.0.0.1";  my $raddr      = "127.0.0.1";
16  my $rport      = 80;  my $rport      = 80;
17  my $logdir    = "$laddr:$lport-$raddr:$rport";  
18    my $logdir;
19    
20  my $help;  my $help;
21  my $daemon;  my $daemon;
22  my $buffersize = 2048;  my $buffersize = 2048;
23  my $logtype;  my $logtype;
24  my $daemon;  my $daemon;
25  my $serverkey = "$logdir/ssl.key";  my $serverkey;
26  my $servercert = "$logdir/ssl.cert";  my $servercert;
27  my $serverdh;  my $serverdh;
28    
29  $| = 1;  $| = 1;
# Line 37  my $goresult = GetOptions( Line 39  my $goresult = GetOptions(
39          "serverkey=s"  => \$serverkey,          "serverkey=s"  => \$serverkey,
40          "servercert=s" => \$servercert,          "servercert=s" => \$servercert,
41          "serverdh=s"   => \$serverdh,          "serverdh=s"   => \$serverdh,
42          "help"         => \$help          "help"         => \$help,
43            'debug!'        => \$debug,
44  );  );
45    
46  if ($help) {  if ($help) {
# Line 62  END Line 65  END
65          exit;          exit;
66  }  }
67    
68    $Net::SSLeay::trace = 4 if $debug;
69    
70    $logdir  ||= "$laddr:$lport-$raddr:$rport";
71    $serverkey ||= "$logdir/ssl.key";
72    $servercert ||= "$logdir/ssl.cert";
73    
74  mkdir $logdir;  mkdir $logdir;
75    
76  system "openssl req -new -x509 -days 365 -nodes -out $servercert -keyout $serverkey"  system "openssl req -new -x509 -days 365 -nodes -out $servercert -keyout $serverkey"
# Line 111  while (1) { Line 120  while (1) {
120          }          }
121  }  }
122    
123    sub hexdump {
124            my $bytes = shift;
125            my $hex = unpack('H*', $bytes);
126            $hex =~ s/(.{8})/$1 /g;
127            return $hex;
128    }
129    
130  sub Run {  sub Run {
131          my ( $ch, $num ) = @_;          my ( $ch, $num ) = @_;
132          my $th = IO::Socket::SSL->new(          my $th = IO::Socket::SSL->new(
# Line 128  sub Run { Line 144  sub Run {
144          my $fh;          my $fh;
145          if ( -d $logdir ) {          if ( -d $logdir ) {
146                  $fh = Symbol::gensym();                  $fh = Symbol::gensym();
147                  my $path = $logdir . Time::HiRes::time();                  my $path = sprintf("%s/%15.5f", $logdir, Time::HiRes::time() );
148                  open( $fh, '>', $path ) or die "$!";                  open( $fh, '>', $path ) or die "$!";
149          }          }
150          $ch->autoflush();          $ch->autoflush();
# Line 167  sub Run { Line 183  sub Run {
183                          if ( $result == 0 ) { exit 0; }                          if ( $result == 0 ) { exit 0; }
184                  }                  }
185                  if ( $fh && $tbuffer ) {                  if ( $fh && $tbuffer ) {
186                          ( print $fh "[c]" . $tbuffer . "[/c]" );                          print $fh "\n# <<< client\n$tbuffer";
187                            warn "C>S ", hexdump($tbuffer), "\n";
188                  }                  }
189                  while ( my $len = length($tbuffer) ) {                  while ( my $len = length($tbuffer) ) {
190                          my $res = syswrite( $th, $tbuffer, $len );                          my $res = syswrite( $th, $tbuffer, $len );
# Line 175  sub Run { Line 192  sub Run {
192                          else            { print STDERR "$!\n"; }                          else            { print STDERR "$!\n"; }
193                  }                  }
194                  if ( $fh && $cbuffer ) {                  if ( $fh && $cbuffer ) {
195                          ( print $fh "[s]" . $cbuffer . "[/s]" );                          print $fh "\n# >>> server\n$cbuffer";
196                            warn "S>C ", hexdump($cbuffer), "\n";
197                  }                  }
198                  while ( my $len = length($cbuffer) ) {                  while ( my $len = length($cbuffer) ) {
199                          my $res = syswrite( $ch, $cbuffer, $len );                          my $res = syswrite( $ch, $cbuffer, $len );

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

  ViewVC Help
Powered by ViewVC 1.1.26