--- trunk/mitm-ssl.pl 2010/01/06 23:54:02 132 +++ trunk/mitm-ssl.pl 2010/01/08 13:52:41 133 @@ -5,23 +5,25 @@ use strict; use POSIX; use IO::Socket::SSL qw(debug3); -$Net::SSLeay::trace = 4; use Getopt::Long; use Time::HiRes qw(time); +my $debug = 0; + my $laddr = "127.0.0.1"; my $lport = 8080; my $raddr = "127.0.0.1"; my $rport = 80; -my $logdir = "$laddr:$lport-$raddr:$rport"; + +my $logdir; my $help; my $daemon; my $buffersize = 2048; my $logtype; my $daemon; -my $serverkey = "$logdir/ssl.key"; -my $servercert = "$logdir/ssl.cert"; +my $serverkey; +my $servercert; my $serverdh; $| = 1; @@ -37,7 +39,8 @@ "serverkey=s" => \$serverkey, "servercert=s" => \$servercert, "serverdh=s" => \$serverdh, - "help" => \$help + "help" => \$help, + 'debug!' => \$debug, ); if ($help) { @@ -62,6 +65,12 @@ exit; } +$Net::SSLeay::trace = 4 if $debug; + +$logdir ||= "$laddr:$lport-$raddr:$rport"; +$serverkey ||= "$logdir/ssl.key"; +$servercert ||= "$logdir/ssl.cert"; + mkdir $logdir; system "openssl req -new -x509 -days 365 -nodes -out $servercert -keyout $serverkey" @@ -111,6 +120,13 @@ } } +sub hexdump { + my $bytes = shift; + my $hex = unpack('H*', $bytes); + $hex =~ s/(.{8})/$1 /g; + return $hex; +} + sub Run { my ( $ch, $num ) = @_; my $th = IO::Socket::SSL->new( @@ -128,7 +144,7 @@ my $fh; if ( -d $logdir ) { $fh = Symbol::gensym(); - my $path = $logdir . Time::HiRes::time(); + my $path = sprintf("%s/%15.5f", $logdir, Time::HiRes::time() ); open( $fh, '>', $path ) or die "$!"; } $ch->autoflush(); @@ -167,7 +183,8 @@ if ( $result == 0 ) { exit 0; } } if ( $fh && $tbuffer ) { - ( print $fh "[c]" . $tbuffer . "[/c]" ); + print $fh "\n# <<< client\n$tbuffer"; + warn "C>S ", hexdump($tbuffer), "\n"; } while ( my $len = length($tbuffer) ) { my $res = syswrite( $th, $tbuffer, $len ); @@ -175,7 +192,8 @@ else { print STDERR "$!\n"; } } if ( $fh && $cbuffer ) { - ( print $fh "[s]" . $cbuffer . "[/s]" ); + print $fh "\n# >>> server\n$cbuffer"; + warn "S>C ", hexdump($cbuffer), "\n"; } while ( my $len = length($cbuffer) ) { my $res = syswrite( $ch, $cbuffer, $len );