]> git.treefish.org Git - fex.git/blobdiff - bin/sexsend
Original release 20160104
[fex.git] / bin / sexsend
index ff3f1ed5d367d8cd5e12c3bb12f82dc7e203f212..d9fe821de487cd5e3733877c9009560286081c1d 100755 (executable)
@@ -19,7 +19,8 @@ use constant M => 2**20;
 
 eval 'use Net::INET6Glue::INET_is_INET6';
 
 
 eval 'use Net::INET6Glue::INET_is_INET6';
 
-our $version = 20150826;
+our $version = 20160104;
+our $DEBUG = $ENV{DEBUG};
 
 my %SSL = (SSL_version => 'TLSv1');
 my $sigpipe;
 
 my %SSL = (SSL_version => 'TLSv1');
 my $sigpipe;
@@ -142,6 +143,8 @@ if ($0 eq 'sexxx') {
   }
 
 } elsif ($0 eq 'sexget' or $0 eq 'fuckme') {
   }
 
 } elsif ($0 eq 'sexget' or $0 eq 'fuckme') {
+
+  $opt_g = 0;
   getopts('hgvVdu:') or die $usage;
   die $usage if $opt_h;
 
   getopts('hgvVdu:') or die $usage;
   die $usage if $opt_h;
 
@@ -175,7 +178,7 @@ if ($0 eq 'sexxx') {
 
 } else { # sexsend
 
 
 } else { # sexsend
 
-  $opt_g = 1;
+  $opt_g = 0;
   getopts('hguvqVTt:') or die $usage;
   die $usage if $opt_h;
 
   getopts('hguvqVTt:') or die $usage;
   die $usage if $opt_h;
 
@@ -605,15 +608,9 @@ sub serverconnect {
   my $connect = "CONNECT $server:$port HTTP/1.1";
   local $_;
 
   my $connect = "CONNECT $server:$port HTTP/1.1";
   local $_;
 
-  if ($opt_v and $port == 443 and %SSL) {
-    foreach my $v (keys %SSL) {
-      printf "%s => %s\n",$v,$SSL{$v};
-    }
-  }
-
   if ($proxy) {
     tcpconnect(split(':',$proxy));
   if ($proxy) {
     tcpconnect(split(':',$proxy));
-    if ($port == 443) {
+    if ($https) {
       printf "--> %s\n",$connect if $opt_v;
       nvtsend($connect,"");
       $_ = <$SH>;
       printf "--> %s\n",$connect if $opt_v;
       nvtsend($connect,"");
       $_ = <$SH>;
@@ -622,14 +619,13 @@ sub serverconnect {
       unless (/^HTTP.1.. 200/) {
         die "$0: proxy error : $_";
       }
       unless (/^HTTP.1.. 200/) {
         die "$0: proxy error : $_";
       }
-      eval "use IO::Socket::SSL";
-      die "$0: cannot load IO::Socket::SSL\n" if $@;
+      &enable_ssl;
       $SH = IO::Socket::SSL->start_SSL($SH,%SSL);
     }
   } else {
     tcpconnect($server,$port);
   }
       $SH = IO::Socket::SSL->start_SSL($SH,%SSL);
     }
   } else {
     tcpconnect($server,$port);
   }
-#  if ($port == 443 and $opt_v) {
+#  if ($https and $opt_v) {
 #    printf "%s\n",$SH->get_cipher();
 #  }
 }
 #    printf "%s\n",$SH->get_cipher();
 #  }
 }
@@ -644,10 +640,9 @@ sub tcpconnect {
     undef $SH;
   }
 
     undef $SH;
   }
 
-  if ($port == 443) {
+  if ($https) {
     # eval "use IO::Socket::SSL qw(debug3)";
     # eval "use IO::Socket::SSL qw(debug3)";
-    eval "use IO::Socket::SSL";
-    die "$0: cannot load IO::Socket::SSL\n" if $@;
+    &enable_ssl;
     $SH = IO::Socket::SSL->new(
       PeerAddr => $server,
       PeerPort => $port,
     $SH = IO::Socket::SSL->new(
       PeerAddr => $server,
       PeerPort => $port,
@@ -664,6 +659,7 @@ sub tcpconnect {
 
   if ($SH) {
     autoflush $SH 1;
 
   if ($SH) {
     autoflush $SH 1;
+    binmode $SH;
   } else {
     die "$0: cannot connect $server:$port - $@\n";
   }
   } else {
     die "$0: cannot connect $server:$port - $@\n";
   }
@@ -672,6 +668,18 @@ sub tcpconnect {
 }
 
 
 }
 
 
+sub enable_ssl {
+  eval "use IO::Socket::SSL";
+  die "$0: cannot load IO::Socket::SSL\n" if $@;
+  eval '$SSL{SSL_verify_mode} = 0 if Net::SSLeay::SSLeay() <= 9470143';
+  if ($opt_v) {
+    foreach my $v (keys %SSL) {
+      printf "%s => %s\n",$v,$SSL{$v};
+    }
+  }
+}
+
+
 sub sendheader {
   my $sp = shift;
   my @head = @_;
 sub sendheader {
   my $sp = shift;
   my @head = @_;
@@ -708,6 +716,18 @@ sub nvtsend {
 }
 
 
 }
 
 
+sub quote {
+  local $_ = shift;
+  s/([^\w\@\/%^,.=+_:+-])/\\$1/g;
+  return $_;
+}
+
+
+sub debug {
+  print "## DEBUG: @_\n" if $DEBUG;
+}
+
+
 # from MIME::Base64::Perl
 sub encode_b64 {
   my $res = "";
 # from MIME::Base64::Perl
 sub encode_b64 {
   my $res = "";